| name | logseq-markdown |
| description | Create and edit Logseq Markdown with wikilinks, block references, block embeds, properties, tags, and other Logseq-specific syntax. Use when working with .md files in Logseq, or when the user mentions block references, page links, Logseq properties, queries, or Logseq notes. |
Logseq Markdown Skill
This skill enables agents to create and edit valid Logseq Markdown, including all Logseq-specific syntax extensions.
Core Concept: Everything is a Block
Logseq is an outliner. Every piece of content lives inside a bullet point. This is the single most important thing to understand.
- This is a block
- This is a child block
- This is a grandchild block
- Back to second level
- Another top-level block
Do not write free-flowing paragraphs at the root level. Always wrap content in bullet list items. The only exception is page-level properties, which go at the very top of the file before any bullets.
Markdown Basics
Logseq uses standard Markdown inside blocks, with some extensions.
Text formatting:
- **Bold text**
- *Italic text*
- ~~Strikethrough~~
- ^^Highlighted text^^
- `Inline code`
- **Bold and *nested italic* works**
Note: Logseq uses ^^text^^ for highlights, not ==text== like Obsidian.
Headings inside blocks:
- # Heading 1
- ## Heading 2
- ### Heading 3
Headings in Logseq are just block content with # prefixes. They do not create a document structure the way they do in regular Markdown files.
Code blocks:
- Here is some code:
```python
def hello():
print("Hello world")
```
Math (LaTeX):
- Inline math: $E = mc^2$
- Block math:
$$
\int_0^\infty e^{-x} dx = 1
$$
Horizontal rule:
- ---
Wikilinks (Page References)
Use double brackets to link to another page. Logseq creates the page automatically if it does not exist.
- [[Page Name]]
- [[Page Name|Custom Display Text]]
- [[namespace/page]]
Namespaces use / to create hierarchy:
- [[projects/website redesign]]
- [[areas/health]]
- [[resources/books/atomic habits]]
When using namespaces, [[projects/website redesign]] shows as "website redesign" in the graph but also appears under the "projects" namespace.
Tags
Tags in Logseq are just page references written with #. Both forms create a link to a page and add a backlink.
- Meeting notes for Q1 planning #meeting #work
- #project/alpha is now active
#tag and [[tag]] are equivalent. Use #tag for short inline tagging and [[Page Name]] when the page name has spaces or you want to display it differently.
Block References
Block references let you embed or link to a specific block by its UUID. Every block in Logseq has a unique ID.
Linking to a block:
- See my earlier thought: ((650a1234-abcd-1234-efgh-000000000001))
This renders as a clickable link showing the referenced block's content.
Embedding a block (transclusion):
- {{embed ((650a1234-abcd-1234-efgh-000000000001))}}
This renders the full content of the referenced block inline, including its children.
How to get a block UUID:
Right-click a bullet point and choose "Copy block ref". The UUID is assigned automatically by Logseq and looks like 650a1234-abcd-1234-efgh-000000000001.
Do not invent block UUIDs. If you need to reference a block, note that the user will need to copy the actual UUID from Logseq.
Page Embeds
Embed an entire page inline:
- {{embed [[Page Name]]}}
Images
- 
- 
- {:height 300, :width 400}
Logseq stores local assets in the assets/ folder of the graph. Image dimensions use {:height N, :width N} syntax (Clojure map notation), not the |300x400 notation of Obsidian.
Task Management
Logseq has two task workflow modes. The default uses TODO → DOING → DONE. An alternative workflow uses NOW → LATER → DONE. Both also support WAITING and CANCELLED markers.
- TODO Buy groceries
- DOING Write the report
- DONE Finish the proposal
Priority:
- TODO [#A] High priority task
- TODO [#B] Medium priority task
- TODO [#C] Low priority task
Scheduled and deadline dates:
- TODO Write blog post
SCHEDULED: <2024-03-15 Fri>
DEADLINE: <2024-03-20 Wed>
For the complete list of markers, checkbox syntax, and workflow details, see references/TASK_MARKERS.md.
Collapsed Blocks
Mark a block as collapsed by default:
- My block with lots of children
collapsed:: true
- Child 1
- Child 2
Ordered Lists
Logseq renders all blocks as bullets by default. To display child blocks as a numbered list, add the logseq.order-list-type property:
- My numbered steps
logseq.order-list-type:: number
- First step
- Second step
- Third step
Calculator Block
Logseq can evaluate math expressions inline:
- #+BEGIN_CALC
2 + 3 * 4
#+END_CALC
PDF Annotations
Logseq can annotate PDF files stored in the assets/ folder:
- 
Logseq opens the PDF in a built-in viewer where you can highlight text and add annotations. Highlights are stored as blocks with references to the PDF.
Block ID
You can assign a custom block ID. Logseq also auto-assigns UUIDs:
- This block has a custom id
id:: my-custom-id-here
In practice, most block IDs are auto-generated UUIDs. You rarely set them manually.
External Links
- [Link text](https://example.com)
- <https://example.com>
Tables
Standard Markdown tables work inside blocks:
- | Name | Age | Role |
|------|-----|------|
| Alice | 30 | Dev |
| Bob | 25 | Design |
Callouts / Admonitions
Logseq uses Org-mode style admonitions (not Obsidian callouts):
- #+BEGIN_NOTE
This is a note admonition.
#+END_NOTE
- #+BEGIN_TIP
This is a helpful tip.
#+END_TIP
- #+BEGIN_WARNING
Be careful here.
#+END_WARNING
- #+BEGIN_IMPORTANT
This is critical information.
#+END_IMPORTANT
- #+BEGIN_CAUTION
Proceed with caution.
#+END_CAUTION
- #+BEGIN_PINNED
Pinned content.
#+END_PINNED
Quotes
- #+BEGIN_QUOTE
To be or not to be, that is the question.
-- Shakespeare
#+END_QUOTE
Or standard Markdown blockquote:
- > This is a quote
> that spans lines
Page Properties
Page-level properties go at the very top of the file, before any content. They are written as key:: value lines inside the first block (or as standalone lines at the top).
title:: My Page Title
tags:: project, active
date:: [[2024-03-15]]
status:: in-progress
See the logseq-properties skill for full details on property types and usage.
Namespace Pages
Logseq supports hierarchical page organization through namespaces. Use / as a separator:
- [[projects/website]]
- [[projects/website/tasks]]
- [[books/non-fiction/atomic habits]]
This creates parent-child relationships in the graph and groups pages visually.
Complete Example
Here is a well-formed Logseq page:
title:: Q1 Planning Meeting
tags:: meeting, planning, [[project/alpha]]
date:: [[2024-01-15]]
attendees:: [[Alice]], [[Bob]], [[Charlie]]
- ## Agenda
- Review last quarter's results
- Set goals for Q1
- Assign owners to each goal
- ## Discussion Notes
- Alice mentioned that the ^^main bottleneck^^ was deployment time
- We need to fix the CI/CD pipeline [[TODO]]
- See related block: ((650a1234-abcd-0000-0000-000000000001))
- Bob shared the updated roadmap
- {{embed [[project/alpha/roadmap]]}}
- ## Action Items
- TODO [[Alice]] Fix deployment pipeline
DEADLINE: <2024-01-30 Tue>
- TODO [[Bob]] Share Q1 OKRs with the team
SCHEDULED: <2024-01-20 Sat>
- DONE [[Charlie]] Send meeting invite #admin
- ## Resources
- [Company Wiki](https://wiki.example.com)
- {:height 300, :width 500}
Common Mistakes to Avoid
- Do not write content outside of bullet points (except page properties at the top)
- Do not use
==text== for highlights (use ^^text^^)
- Do not use
![[embed]] syntax (Obsidian-style). Use {{embed [[Page]]}} instead
- Do not use YAML frontmatter with
--- fences for properties. Use inline key:: value syntax
- Do not use
[[Note#^block-id]] to reference blocks. Use ((uuid)) instead
- Do not invent block UUIDs. They must come from Logseq itself