[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-79984":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":13,"subscribersCount":13,"size":13,"stars1d":14,"stars7d":15,"stars30d":16,"stars90d":13,"forks30d":13,"starsTrendScore":17,"compositeScore":18,"rankGlobal":8,"rankLanguage":8,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":8,"pushedAt":8,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":13,"starSnapshotCount":13,"syncStatus":27,"lastSyncTime":28,"discoverSource":29},79984,"zotero-taxonomy-curator","ganzoth\u002Fzotero-taxonomy-curator","ganzoth",null,"Python",95,7,73,0,4,6,19,12,2.71,"MIT License",false,"main",true,[],"2026-06-12 02:03:56","# Zotero Taxonomy Curator\n\nZotero Taxonomy Curator is a domain-configurable workflow for turning Zotero\nmetadata, PDFs, annotations, highlights, and manual tags into structured\nObsidian literature notes with a controlled taxonomy.\n\nIt is not an automatic paper summarizer. Its goal is to help researchers build a\nmaintainable literature system:\n\n```text\nZotero evidence -> taxonomy mapping -> structured Obsidian notes -> literature index\n```\n\n## Features\n\n- Read Zotero items and collections from a local `zotero.sqlite` database.\n- Preserve Zotero manual tags as first-class evidence.\n- Map original tags to a user-defined taxonomy.\n- Separate stable `canonical_tags` from exploratory `candidate_tags`.\n- Create structured Markdown notes for Obsidian.\n- Support any research domain through YAML taxonomy configuration.\n- Validate note tags against the taxonomy.\n- Avoid hard-coded local paths by using `config\u002Flocal.yaml`.\n\n## Project structure\n\n```text\nzotero-taxonomy-curator\u002F\n├─ README.md\n├─ LICENSE\n├─ .gitignore\n├─ config\u002F\n│  ├─ local.example.yaml\n│  ├─ empty-taxonomy.yaml\n│  └─ taxonomy.example.yaml\n├─ skills\u002F\n│  └─ zotero-taxonomy-curator\u002F\n│     ├─ SKILL.md\n│     ├─ templates\u002F\n│     │  ├─ empty-taxonomy.yaml\n│     │  └─ literature-note-template.md\n│     └─ scripts\u002F\n│        ├─ curator_common.py\n│        ├─ init_curator_project.py\n│        ├─ extract_zotero_evidence.py\n│        ├─ list_zotero_collections.py\n│        └─ validate_taxonomy_notes.py\n├─ templates\u002F\n│  └─ literature-note-template.md\n├─ examples\u002F\n│  └─ vrp-taxonomy.example.yaml\n└─ docs\u002F\n   ├─ taxonomy-design.md\n   ├─ zotero-setup.md\n   └─ obsidian-workflow.md\n```\n\n## Quick start\n\n### Option A: first-run initializer\n\nAfter installing `skills\u002Fzotero-taxonomy-curator\u002F` into your Codex skills\ndirectory, initialize a project from the project root:\n\n```bash\npython ~\u002F.codex\u002Fskills\u002Fzotero-taxonomy-curator\u002Fscripts\u002Finit_curator_project.py\n```\n\nOn Windows, use the corresponding path, for example:\n\n```powershell\npython \"$env:USERPROFILE\\.codex\\skills\\zotero-taxonomy-curator\\scripts\\init_curator_project.py\"\n```\n\nThe initializer will:\n\n- try to detect `zotero.sqlite` from environment variables, Zotero profile\n  preferences, and common default locations;\n- create `config\u002Flocal.yaml`;\n- create an empty `config\u002Ftaxonomy.yaml`;\n- copy the bundled close-reading note template to `templates\u002F`;\n- create `notes\u002Fliterature\u002F` and a starter `Literature Index.md`.\n\nIf Zotero is installed in a custom location, pass paths explicitly:\n\n```bash\npython ~\u002F.codex\u002Fskills\u002Fzotero-taxonomy-curator\u002Fscripts\u002Finit_curator_project.py \\\n  --zotero-sqlite \"\u002Fpath\u002Fto\u002Fzotero.sqlite\" \\\n  --zotero-storage \"\u002Fpath\u002Fto\u002FZotero\u002Fstorage\"\n```\n\n### Option B: manual setup\n\n1. Copy the example local config:\n\n   ```bash\n   cp config\u002Flocal.example.yaml config\u002Flocal.yaml\n   ```\n\n2. Edit `config\u002Flocal.yaml` and set your Zotero database paths.\n\n3. Copy or create a taxonomy:\n\n   ```bash\n   cp config\u002Fempty-taxonomy.yaml config\u002Ftaxonomy.yaml\n   ```\n\n4. Customize `config\u002Ftaxonomy.yaml` for your own field.\n\n5. Install `skills\u002Fzotero-taxonomy-curator\u002F` into your Codex skills directory.\n\n6. Use the skill on one Zotero item or a collection.\n\n## Configuration\n\n`config\u002Flocal.yaml` is intentionally ignored by Git because it contains local\npaths. Use `config\u002Flocal.example.yaml` as the public template.\n\nMinimal config:\n\n```yaml\nzotero:\n  sqlite_path: \"\u002Fpath\u002Fto\u002Fzotero.sqlite\"\n  storage_dir: \"\u002Fpath\u002Fto\u002FZotero\u002Fstorage\"\n\noutput:\n  note_root: \"notes\u002Fliterature\"\n  index_file: \"notes\u002Fliterature\u002FLiterature Index.md\"\n\ntaxonomy:\n  path: \"config\u002Ftaxonomy.yaml\"\n\ntemplate:\n  path: \"templates\u002Fliterature-note-template.md\"\n```\n\n## Taxonomy-first workflow\n\nThe core idea is to build a controlled vocabulary for your field.\n\n- `canonical_tags` are stable tags used for retrieval and comparison.\n- `candidate_tags` are new or uncertain terms that should not be promoted too early.\n- `aliases` map spelling variants and user tags to canonical forms.\n- `candidate_terms` record emerging concepts for later review.\n\nThe default note template is a Chinese close-reading note scaffold inspired by\nresearch-paper notes: source positioning, tag marking, core summary,\nproblem positioning, model or assumptions, methods, core formulas or mechanisms,\nevidence\u002Fdata\u002Fexperiments, main findings, and personal reuse assessment. It keeps\nonly the necessary taxonomy traces: original Zotero tags, `canonical_tags`,\n`candidate_tags`, and a compact tag-decision table. Full category definitions\nbelong in `config\u002Ftaxonomy.yaml`, not in every note.\n\nThe template also includes optional review-paper fields (`review_type`,\n`review_scope_tags`, review method and coverage) and writing discipline for\nmodels and formulas: use LaTeX for mathematical objects, keep formulas tied to\nsource evidence, and mark unclear formulas for PDF verification rather than\nguessing.\n\nThe default taxonomy is generic. The VRP taxonomy in `examples\u002F` shows how a\ndomain-specific taxonomy can be built without changing the skill itself.\n\n## Scripts\n\nThe scripts are named as functional modules rather than generic helpers:\n\n| Module | Script | Purpose |\n| --- | --- | --- |\n| Curator Core | `curator_common.py` | Shared configuration, Zotero database, and attachment utilities. |\n| Project Initializer | `init_curator_project.py` | Create first-run local config, empty taxonomy, note template, and note folder. |\n| Evidence Collector | `extract_zotero_evidence.py` | Build a raw evidence packet from one Zotero item without summarizing it. |\n| Collection Navigator | `list_zotero_collections.py` | Inspect Zotero collection paths before selecting items to process. |\n| Taxonomy Gatekeeper | `validate_taxonomy_notes.py` | Validate Obsidian note tags against the configured taxonomy. |\n\nInitialize a project:\n\n```bash\npython skills\u002Fzotero-taxonomy-curator\u002Fscripts\u002Finit_curator_project.py\n```\n\nList Zotero collections:\n\n```bash\npython skills\u002Fzotero-taxonomy-curator\u002Fscripts\u002Flist_zotero_collections.py \\\n  --config config\u002Flocal.yaml \\\n  --out output\u002Fcollections.json\n```\n\nExtract one item:\n\n```bash\npython skills\u002Fzotero-taxonomy-curator\u002Fscripts\u002Fextract_zotero_evidence.py \\\n  --config config\u002Flocal.yaml \\\n  --item-key ABCD1234 \\\n  --out output\u002Fraw_zotero_item.json\n```\n\nValidate notes:\n\n```bash\npython skills\u002Fzotero-taxonomy-curator\u002Fscripts\u002Fvalidate_taxonomy_notes.py \\\n  --taxonomy config\u002Ftaxonomy.yaml \\\n  notes\u002Fliterature\n```\n\n## What should not be committed\n\nDo not commit:\n\n- `config\u002Flocal.yaml`\n- Zotero databases\n- Zotero `storage\u002F`\n- private PDFs\n- generated notes from private projects\n- temporary extraction files\n\nUse `.gitignore` as the default safety net.\n","Zotero Taxonomy Curator 是一个可配置的工作流，用于将 Zotero 元数据、PDF、注释、高亮和手动标签转换为具有受控分类法的结构化 Obsidian 笔记。该项目的核心功能包括从本地 `zotero.sqlite` 数据库读取 Zotero 项目和集合，保留 Zotero 手动标签作为主要证据，并将原始标签映射到用户定义的分类体系。它还支持通过 YAML 文件配置分类体系，验证笔记标签，并创建结构化的 Markdown 笔记。适合需要构建可维护文献系统的研究人员使用，尤其适用于那些希望在特定研究领域内保持文献组织有序的研究者。",2,"2026-06-11 03:58:48","CREATED_QUERY"]