Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

Diy Pc Ingest

v2.0.1

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.

0· 1.1k·0 current·0 all-time
byAltair@nextaltair
Security Scan
VirusTotalVirusTotal
Suspicious
View report →
OpenClawOpenClaw
Benign
medium confidence
Purpose & Capability
The skill is clearly designed to parse/classify user-pasted PC part text and upsert rows into Notion — the bundled JS/Python scripts call the Notion API and use the 2025-09-03 data_sources/pages endpoints as described. However, the registry metadata claims no required environment variables or config paths, while the SKILL.md and scripts require a Notion token (NOTION_API_KEY or NOTION_TOKEN and fallback file NOTION_API_KEY_FILE) and local config (~/.config/diy-pc-ingest/config.json). That mismatch is an administrative/information omission but not malicious.
Instruction Scope
SKILL.md confines runtime behavior to classifying/extracting fields from pasted text, optionally enriching via web_search/web_fetch, asking clarifying questions, and then calling scripts/notion_apply_records.js to upsert into Notion. The scripts themselves are deterministic and only perform Notion queries/patches/creates. There is no instruction to read unrelated sensitive system files or exfiltrate data to unknown endpoints (all network calls target api.notion.com).
Install Mechanism
There is no install spec (instruction-only skill) and bundled code is plain JS/Python source. No remote downloads or opaque binaries are pulled during install. The only persistence is writing a local config file under the user's home (~/.config/diy-pc-ingest/config.json) via bootstrap behavior.
Credentials
The skill requires a Notion integration token (NOTION_API_KEY/NOTION_TOKEN) to function and may read/write local files (NOTION_API_KEY_FILE, DIY_PC_INGEST_CONFIG, and ~/.config/diy-pc-ingest/config.json). Those are proportional to the stated Notion-upsert purpose, but the registry metadata did not declare these required env vars or config paths — verify you supply a dedicated limited-scope Notion integration token and manage the local config carefully.
Persistence & Privilege
always:false (no forced always-on). The skill will create/overwrite ~/.config/diy-pc-ingest/config.json when bootstrapping Notion IDs if the config is missing, and it will read token files from ~/.config/notion/api_key if used. This is reasonable for convenience but users should be aware of and control that file creation and the token source. The skill does not modify other skills' configs or system-wide settings.
Assessment
This skill appears to do what it claims: parse pasted PC part text and upsert rows into Notion. Before installing or running it: - Provide a dedicated Notion integration token (NOTION_API_KEY) with only the necessary DB/page access; do not reuse high-privilege tokens. - Be aware the skill will write ~/.config/diy-pc-ingest/config.json when bootstrapping IDs and may read ~/.config/notion/api_key or other env-vars (DIY_PC_INGEST_CONFIG, NOTION_API_KEY_FILE). Inspect that config and remove any secrets before sharing. - Review scripts/notion_apply_records.js and bootstrap_config.js (they are readable JS) to confirm behavior and to see what fields will be sent to Notion. - If you want to limit network exposure, run the skill in a controlled environment or temporarily restrict the integration's access while testing. - Because registry metadata omitted required env/config declarations, treat the omission as an informational mismatch (not necessarily malicious) and confirm you can supply the required NOTION_API_KEY and local config before enabling the skill.

Like a lobster shell, security has layers — review code before you run it.

latestvk97apemeyyzwwetd8wpd16dzvn80yfp3
1.1kdownloads
0stars
3versions
Updated 2h ago
v2.0.1
MIT-0

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.json
  1. Fill in your Notion targets (IDs):
  • notion.targets.*.data_source_id (for schema/query)
  • notion.targets.*.database_id (for creating pages)
  1. Provide a Notion integration token (choose one):
  • env: NOTION_API_KEY (recommended)
  • or ~/.config/notion/api_key (legacy local path)
  • or inline notion.api_key in config.json (not recommended if you publish/share configs)

Notes:

  • This skill uses Notion-Version 2025-09-03 by default.
  • Targets are read at runtime from config; see 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.
  • PCConfig: (Name + Purchase Date) を複合キーとして扱う(exact)。重複ヒット時は書き込まず質問。
  • If a key collides with multiple rows, do not write; ask user.

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.
    • requires: 現在の接続先PC, 購入日, Name

Targets: enclosure | storage | pcconfig | pcinput

Property value encoding:

  • select/status: string name
  • rich_text: string
  • number: number
  • date: YYYY-MM-DD
  • checkbox: boolean
  • relation: array of page_ids (advanced; avoid unless needed)

Notes

  • Always use Notion-Version 2025-09-03.
  • Prefer POST /v1/data_sources/{id}/query over /databases/{id}/query.
  • Relation schema updates require relation.data_source_id (not database_id).

Note (implementation)

  • JS implementation is the default: scripts/notion_apply_records.js
  • Legacy Python implementation is kept for reference: scripts/_deprecated/notion_apply_records.py

Comments

Loading comments...