Diy Pc Ingest
by @nextaltair
Ingest pasted PC parts purchase/config text (Discord message receipts, bullet lists) into Notion DIY_PC tables (PCConfig, ストレージ, エンクロージャー, PCInput). Use when the user pastes raw purchase logs/spec notes and wants the AI to classify, enrich via web search, ask follow-up questions for unknowns, and then upsert rows into the correct Notion data sources using the 2025-09-03 data_sources API.
clawhub install openclaw-skill-diy-pc-ingest📖 About This Skill
name: diy-pc-ingest description: Ingest pasted PC parts purchase/config text (Discord message receipts, bullet lists) into Notion DIY_PC tables (PCConfig, ストレージ, エンクロージャー, PCInput). Use when the user pastes raw purchase logs/spec notes and wants the AI to classify, enrich via web search, ask follow-up questions for unknowns, and then upsert rows into the correct Notion data sources using the 2025-09-03 data_sources API.
diy-pc-ingest
Setup (required)
This skill is intended to be shared. Do not hardcode your Notion IDs or token in the skill.
1) Copy the example config:
skills/diy-pc-ingest/references/config.example.json → ~/.config/diy-pc-ingest/config.json2) Fill in your Notion targets (IDs):
notion.targets.*.data_source_id (for schema/query)notion.targets.*.database_id (for creating pages)3) Provide a Notion integration token (choose one):
NOTION_API_KEY (recommended)~/.config/notion/api_key (legacy local path)notion.api_key in config.json (not recommended if you publish/share configs)Notes:
2025-09-03 by default.references/config.example.json.Canonical Notion targets
Use data_sources endpoints for schema/query, and pages endpoint for row creation.
(IDs are intentionally not included in this public skill. They live in your local config.)
Workflow (A: user pastes raw text)
1) Read the pasted text and decide target table per item: - エンクロージャー: USB/RAID/HDDケース/ドック、ベイ数、JAN/型番、"安全な取り外し"表示名。 - ストレージ: HDD/SSD/NVMe/SATA/容量/シリアル/健康状態。 - PCConfig: CPU/GPU/RAM/PSU/MB/ケース/冷却/NIC/キャプチャ等。
2) Extract fields (best-effort). Prefer Japanese column names as they exist in each table.
3) Enrich specs using web_search/web_fetch when it reduces user work (e.g., bay count, interface, capacity, form factor). Keep it minimal; don’t overfill.
4) Ask follow-up questions only for fields needed to avoid ambiguity or bad joins. - ストレージ: Serial missing → ask for serial (or confirm creating as “暫定/シリアル不明”). - エンクロージャー: ベイ数 or USB/Thunderbolt/LAN unclear → ask. - PCConfig: Identifier/型番 missing but needed to match existing row → ask.
5) Upsert into Notion using scripts/notion_apply_records.js:
- Provide JSONL records (one per item) on stdin.
- Script will:
- find an existing row by key (see below)
- patch only missing fields unless overwrite=true
- otherwise create a new row
6) Report results (created/updated/skipped) and link any created rows.
Upsert keys (rules)
シリアル (exact) is the primary key. If the existing row was created without serial, allow a safe fallback match by title + (optional) 購入日/価格(円) to support post-fill of serial/health/scan-date.取り外し表示名 (exact) else title/name.(Name + Purchase Date) を複合キーとして扱う(exact)。重複ヒット時は書き込まず質問。JSONL input format for the apply script
Each line is a JSON object:
{"target":"enclosure","title":"RATOC RS-EC32-R5G","properties":{"種別":"USBケース","接続":"USB","ベイ数":2,"普段つないでるPC":"RECRYZEN","購入日":"2026-01-18","購入店":"PCワンズ","価格(円)":8977,"取り外し表示名":"RS-EC32-R5G","メモ":"JAN: 4949090752191"}}
Optional control fields (for cleanup / manual fixes):
page_id (or id): update this Notion page directly (bypasses upsert matching)archive: true: archive the page (useful for de-dup)overwrite: true: allow overwriting existing values (including clearing with null)Optional behavior flags:
mirror_to_pcconfig: true (only for target=storage): also create/update a pcconfig row for the installed component.現在の接続先PC, 購入日, NameTargets: enclosure | storage | pcconfig | pcinput
Property value encoding:
YYYY-MM-DDNotes
2025-09-03.POST /v1/data_sources/{id}/query over /databases/{id}/query.relation.data_source_id (not database_id).Note (implementation)
scripts/notion_apply_records.jsscripts/_deprecated/notion_apply_records.py📋 Tips & Best Practices
2025-09-03.POST /v1/data_sources/{id}/query over /databases/{id}/query.relation.data_source_id (not database_id).