CtrlK
BlogDocsLog inGet started
Tessl Logo

migrate

Universal migration from Obsidian, Notion, Logseq, markdown, CSV, JSON, Roam

50

Quality

56%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

Fix and improve this skill with Tessl

tessl review fix ./skills/migrate/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

56%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

The skill's body has a well-sequenced batch workflow with strong validation coverage and several concrete gbrain commands, but it suffers from redundant repetition of the same safety/sample rules, vague instructions for the core generic import path, and references to bundle files that don't exist. Splitting per-source guides into reference files and adding a concrete import command for the generic path would improve it most.

Suggestions

Provide a concrete import command or tool-call example for the generic path (e.g. the put_page invocation for 'Import the vault directory into gbrain' and the CSV row-to-page loop) (actionability).

Deduplicate the sample-test and safety rules by stating them once in Contract and referencing that from Phases/Verification/Anti-Patterns (conciseness).

Add an explicit recovery step to Verification (what to do when page count mismatches or health check fails) (workflow_clarity).

Move per-source migration details (Notion, CSV, Roam) into a references/ file and fix or create the referenced paths like skills/conventions/brain-routing.md (progressive_disclosure).

DimensionReasoningScore

Conciseness

The body is mostly tight tables and numbered steps, but it repeats the same guidance multiple times — the 5-10 file sample test appears in 'Contract' ('Migration is tested on a sample (5-10 files)'), 'Phases' step 3, 'Verification' step 4, and 'Anti-Patterns' — and the company-repositories section restates its safety constraints several times ('Never fix the source files...', 'Do not activate a global schema...', 'do not change the approval...'). Not the padding of the 1-2 anchors, but clearly more than the 'minor instances' of the 4 anchor.

3 / 5

Actionability

Concrete, executable commands exist in places ('gbrain extract links --source db --dry-run', 'gbrain sources inspect <path> --profile company-brain --json', 'gbrain sync --brain <id> --source <id> --no-embed --no-pull'), but the generic path is instruction-level only: 'Import the vault directory into gbrain', 'For each row in the CSV, create a page', and 'Store each page in gbrain' name no tool call, command, or code for the core import operation. This mixes executable commands with missing key details, matching the 3 anchor better than 4.

3 / 5

Workflow Clarity

The sequence is clear with explicit validation checkpoints for a batch operation — sample test (step 3) before bulk import, then a dedicated Verification section (page count, health check, round-trip export, spot-check, search test), satisfying the batch-operation validation requirement. It falls short of 5 because no error-recovery loop is specified (what to do when verification fails or page counts mismatch) and the generic-phases list is awkwardly prefaced by the company-repository redirect, creating some dual-path ambiguity.

4 / 5

Progressive Disclosure

The file is well-sectioned with clear headers, but it references files that are not part of the bundle and do not exist ('skills/conventions/brain-routing.md', 'skills/conventions/untrusted-content.md', 'docs/guides/company-brain-ingestion.md') — no references/, scripts/, or assets/ directories are present — and per-source migration details that would fit separate reference files are all inlined in a 175-line monolith. This matches 'some structure but could be better organized' with unverifiable references, not the well-signaled, verified one-level references of a 4.

3 / 5

Total

13

/

20

Passed

Description

56%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

The description clearly names the domain and all supported sources, giving it good trigger keywords and distinctiveness, but it specifies no concrete actions and omits any 'use when' trigger guidance, capping completeness. A sentence naming the key actions and when to invoke the skill would lift it substantially.

Suggestions

Add concrete actions to the description, e.g. 'Migrates vaults and exports into GBrain pages: imports files, converts wikilinks/block refs/tags to gbrain links, and verifies round-trip integrity' (specificity).

Add an explicit trigger clause, e.g. 'Use when the user wants to move or migrate notes from Obsidian, Notion, Logseq, Roam, or markdown/CSV/JSON exports into GBrain' (completeness).

Include natural user phrasings such as 'switch from Notion', 'move my notes', or 'import my vault' to broaden trigger coverage (trigger_term_quality).

DimensionReasoningScore

Specificity

The description names the domain ("migration") and enumerates seven sources ("Obsidian, Notion, Logseq, markdown, CSV, JSON, Roam") but names no concrete actions such as importing, converting, or verifying — the action is a single generic verb like the anchor 'Processes PDF files'. It is not entirely vague (ruling out 1), but the action coverage is minimal, ruling out 3.

2 / 5

Completeness

The 'what' is clear (migration from those sources into GBrain) but there is no 'Use when...' or equivalent trigger clause anywhere in the description, which caps completeness at 3 per the judging guideline. It is above 2 because 'what' is explicit, and below 4 because 'when' is absent rather than merely imprecise.

3 / 5

Trigger Term Quality

Natural product names users would say (Obsidian, Notion, Logseq, Roam) plus generic formats (markdown, CSV, JSON) give good keyword coverage; the sentence 'Universal migration from' matches the common phrasing 'migrate from Notion'. It misses natural action phrases like 'switch from', 'move my notes', or 'import my vault', keeping it below the 5 anchor's synonym/file-extension coverage.

4 / 5

Distinctiveness Conflict Risk

The named-source niche (Obsidian/Notion/Logseq/Roam → GBrain) is largely distinct with source-specific trigger terms, so it beats 'somewhat specific' (3). It stays at 4 rather than 5 because 'Universal migration ... markdown, CSV, JSON' is a broad claim that could overlap with general import/export or data-ingestion skills.

4 / 5

Total

13

/

20

Passed

Validation

87%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 14 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

frontmatter_unknown_keys

Unknown frontmatter key(s) found; consider removing or moving to metadata

Warning

relative_links

Relative link issues: 1 missing

Warning

Total

14

/

16

Passed

Repository
garrytan/gbrain
Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.