Deep expertise in Logseq's Datascript database schema. Auto-invokes when users ask about Logseq DB schema, Datascript attributes, built-in classes, property types, entity relationships, schema validation, or the node/block/page data model. Provides authoritative knowledge of the DB graph architecture.
/plugin marketplace add C0ntr0lledCha0s/claude-code-plugin-automations/plugin install logseq-expert@claude-code-plugin-automationsThis skill is limited to using the following tools:
assets/class-template.ednassets/property-template.ednreferences/built-in-classes.mdThis skill auto-invokes when:
:db/ident, :logseq.class/*, or :logseq.property/*Reference Material: See {baseDir}/references/built-in-classes.md for complete class hierarchy.
You have expert knowledge of Logseq's database schema architecture.
Logseq DB graphs are built on Datascript, a Clojure/ClojureScript in-memory database that supports:
;; Value types
:db.type/ref ; References to other entities
:db.type/string ; Text values
:db.type/long ; Integer numbers
:db.type/double ; Floating point numbers
:db.type/boolean ; True/false
:db.type/instant ; Timestamps
:db.type/keyword ; Clojure keywords
:db.type/uuid ; UUIDs
;; Cardinality
:db.cardinality/one ; Single value
:db.cardinality/many ; Multiple values (set)
:block/tags ; Classes/tags assigned to the entity
:block/refs ; Outgoing references to other entities
:block/alias ; Alternative names for a page
:block/parent ; Parent block in hierarchy
:block/page ; Page containing this block
:logseq.class/Root
├── :logseq.class/Page
├── :logseq.class/Tag (classes themselves)
├── :logseq.class/Property
├── :logseq.class/Task
│ └── Status, Priority, Deadline, Scheduled
├── :logseq.class/Query
├── :logseq.class/Asset
├── :logseq.class/Code-block
└── :logseq.class/Template
All non-Root classes extend :logseq.class/Root via :logseq.property.class/extends.
| Type | Validator | Closed Values | Use Case |
|---|---|---|---|
:default | text-entity? | ✅ | Text blocks with titles |
:number | number-entity? | ✅ | Numeric values |
:date | date? | ❌ | Journal page entities |
:datetime | datetime? | ❌ | Time-based scheduling |
:checkbox | boolean? | ❌ | Toggle properties |
:url | url-entity? | ✅ | URL strings or macros |
:node | node-entity? | ❌ | Block/page references |
:class | class-entity? | ❌ | Class entities |
{:db/ident :user.property/my-property
:logseq.property/type :default ; Property type
:logseq.property/cardinality :one ; :one or :many
:logseq.property/hide? false ; Hide by default
:logseq.property.ui/position :properties ; UI placement
:logseq.property/closed-values [...] ; Restricted choices
:logseq.property/schema-classes [...] ; Associated classes
:block/title "My Property"} ; Display name
| Namespace | Purpose | Example |
|---|---|---|
logseq.property | Core system properties | :logseq.property/type |
logseq.property.class | Class-related | :logseq.property.class/extends |
logseq.property.table | Table views | :logseq.property.table/columns |
user.property | User-defined | :user.property/author |
plugin.property | Plugin-defined | :plugin.property/custom |
;; Version format
{:major 65 :minor 12}
;; Stored in
:logseq.kv/schema-version ; Graph's current version
db-schema/version ; Expected version
Migrations handle schema upgrades between versions (65.0 → 65.12+).
[property-map value] tuples:logseq.property/type:many vs :one handlingvalidate-tx-report ensures integrityIn DB version, nodes represent both pages and blocks:
Node
├── Page (unique by tag combination)
│ ├── Journal pages (#Journal)
│ ├── Regular pages (#Page)
│ └── Class pages (#Tag)
└── Block (within pages)
├── Content blocks
├── Property blocks
└── Convertible to page via #Page tag
Pages are unique by their tag combination:
;; Define a class with properties
{:db/ident :user.class/Book
:block/tags [:logseq.class/Tag]
:block/title "Book"
:logseq.property.class/extends :logseq.class/Root
:logseq.property/schema-classes
[:user.property/author
:user.property/isbn
:user.property/rating]}
;; Number property with choices
{:db/ident :user.property/rating
:block/title "Rating"
:logseq.property/type :number
:logseq.property/cardinality :one
:logseq.property/closed-values [1 2 3 4 5]}
When users need more information, reference:
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.