From logseq
Use when the user asks to capture to Logseq, save to Logseq, add to their Logseq journal, create a Logseq entry, log something to Logseq, write to Logseq, note something in Logseq, or mentions saving notes, tasks, code snippets, or meeting notes to Logseq. Also use when the user runs /logseq:capture or /logseq:quick-capture commands.
npx claudepluginhub gchiam/claude-code-plugins --plugin logseqThis skill uses the workspace's default tool permissions.
Use this skill to create well-structured entries in a Logseq graph via the graphthulhu MCP server.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
Use this skill to create well-structured entries in a Logseq graph via the graphthulhu MCP server.
Before capturing, verify graphthulhu MCP is connected. The mcp__graphthulhu__* tools must be available. If they are not, inform the user and show the setup instructions from references/setup-guide.md.
All writes to Logseq use mcp__graphthulhu__upsert_blocks. This tool creates or updates blocks on a page.
Key parameters:
page — target page name (e.g., "2026/03/10" or "My Notes")blocks — array of block objects with content and optional childrenFor today's journal page, detect the format first (see Detecting Journal Page Format below).
Logseq uses an outliner model — every piece of content is a block, and blocks can nest. Structure entries as follows:
{
"page": "2026/03/10",
"blocks": [
{
"content": "Entry title or summary #claude-managed #relevant-tag\ntype:: note\nsource:: claude-code",
"children": [
{ "content": "Main content goes here" },
{ "content": "Additional detail or sub-point",
"children": [
{ "content": "Nested detail if needed" }
]
}
]
}
]
}
Properties (key:: value) and tags (#tag) go inline on the parent block, not as separate child blocks.
Note:
Summary of the note #claude-managed #note
type:: note
source:: claude-code
Task:
TODO Task description #claude-managed #task
type:: task
priority:: A
Use TODO prefix for tasks. Priority values: A (high), B (medium), C (low).
Code Snippet:
Code snippet: brief description #claude-managed #code
type:: code
language:: python
source:: claude-code
Put the actual code block as a child using standard markdown fenced code blocks.
Meeting Note:
Meeting: [topic/title] #claude-managed #meeting
type:: meeting
date:: [[2026-03-10]]
attendees::
Insight/Learning:
Insight: [brief summary] #claude-managed #insight
type:: insight
source:: claude-code
For structured journal pages, entries can be nested under a section heading block to group related content. This makes the daily journal more scannable:
{
"page": "2026/03/10",
"blocks": [
{
"content": "## Meetings",
"children": [
{
"content": "Meeting: 1:1 with manager #claude-managed #meeting\ntype:: meeting\ndate:: [[2026-03-10]]",
"children": [...]
}
]
}
]
}
Use section headings when the user's journal already uses this convention, or when capturing multiple entries of the same type in one call. For single quick captures, a flat top-level block is preferred — less friction, easier to scan in reverse chronological order.
Common section names: ## Meetings, ## Tasks, ## Notes, ## Captures
#claude-managed on every entry created by Claude#my-tag, #project-alpha[[Page Name]][[YYYY-MM-DD]] formatLogseq's journal page name format is user-configurable (e.g. yyyy/MM/dd, MM-dd-yyyy, yyyyMMdd). Resolve it using this priority order:
.claude/logseq.local.md for journal_format. If present, use it directly.~/.claude/logseq.local.md for journal_format. If present, use it directly.mcp__graphthulhu__list_pages (sortBy: modified, limit: 20), find the first entry where "journal": true, and match its name against today's known date to infer the format.YYYY/MM/DD.Example: if today is 2026-03-11 and a journal page is named "2026/03/11", the format is YYYY/MM/DD.
Before capturing, check for settings in order: .claude/logseq.local.md (project-level) then ~/.claude/logseq.local.md (global). Project settings take precedence. Parse for:
default_page — override the default target pagejournal_format — explicit journal page name format (e.g. YYYY/MM/DD, MM-dd-yyyy); skips auto-detection when setapi_url — custom Logseq API URL (if not using default)See references/setup-guide.md for settings file format.
For structured capture (/logseq:capture):
mcp__graphthulhu__upsert_blocksFor quick capture (/logseq:quick-capture):
For last-response capture (/logseq:capture-last):
source:: claude-code propertyIf upsert_blocks fails:
logseq-setup agent for automated diagnosticsmcp__graphthulhu__get_page, journal_range, or search directly)Commands that implement work tracking use the following conventions. Both /logseq:work-log and /logseq:new-work-page delegate to these definitions.
Work-log commands write to today's journal page. Use the journal format detection procedure in Detecting Journal Page Format to determine the page name.
Work-log entries are appended to today's journal under these section headings (created on demand if absent):
## In Progress — active work items## Done — completed items## Blocked — items waiting on something## Next — planned upcoming workSection headings are created as parent blocks; work items are their children.
To check whether a section heading exists before writing, call mcp__graphthulhu__get_page on today's journal page and scan the returned blocks for a block whose content starts with the heading text (e.g. ## In Progress).
[[JIRA/PROJ-123]] description of work #claude-managed #work-log [HH:MM]
[HH:MM] (local time, 24h) is appended at the end[[double brackets]] for Logseq auto-linkingtype:: or source:: properties — high-frequency journal entries use the #work-log tag as the type signal| Type | Argument | Page name |
|---|---|---|
| JIRA ticket | jira PROJ-123 | JIRA/PROJ-123 |
| Pull Request | pr myrepo 42 | PR/myrepo/42 |
| Repo/service | repo my-service | Repo/my-service |
In each template below, the first line is the content of the first block (which also serves as the page title). Properties follow inline on the same block content string, separated by newlines.
JIRA page:
JIRA/PROJ-123 #claude-managed #jira
status:: in-progress
sprint::
repo::
prs::
PR page:
PR/myrepo/42 #claude-managed #pr
status:: open
jira::
repo:: [[Repo/myrepo]]
opened:: [[YYYY-MM-DD]]
merged::
Repo page:
Repo/my-service #claude-managed #repo
team::
stack::
/logseq:work-log:
get_page; note which section headings already exist<description> #claude-managed #work-log [HH:MM]; append under the correct section (create heading + child in one call if section is absent)/logseq:new-work-page:
jira/pr/repo) and identifier from args or promptget_page to check if page exists; if so, warn and stopupsert_blocksreferences/setup-guide.md — graphthulhu installation, Logseq API setup, settings file formatreferences/block-examples.md — worked upsert_blocks examples for all entry types