juanirm

Logseq

知識管理v1.0.0
作者:juanirm更新於 2026-05-17logseq@clawhub_juanirm/logseq
資料整理資訊檢索筆記整理#Database

據 AlphaMoat 統計,截至 2026-09,Logseq 累計下載 4,720 次、獲 6 個星標,在全部 5,078 個 AI 技能中排名第 2,004 位,在「知識管理」分類(442 個)中排名第 189 位。

累計安裝
149
累計下載
4720
星標
6
全站排名
#2,004
全站前 40% · 「知識管理」前 43%
平台累計安裝累計下載星標評論
ClawHub ↗14943136-
SkillHub ↗14847206—

各平台的計數口徑不同,統計時間不一致。

這個技能是做什麼的

該技能可訪問頁面和區塊內容、執行 Datalog 查詢、建立或更新頁面及區塊,並可能刪除頁面或批次修改內容。它依賴正在執行並啟用 API 的 Logseq 例項,外部指令碼通常還需要橋接或代理;寬泛的本地 HTTP/IPC 橋可能暴露筆記。應限制為可信本地圖譜和白名單操作,避免開放通用橋接;執行刪除或批次更改前先備份並取得確認。 API 主要面向外掛,外部指令碼需配置合適連線方式。

資料釋出於 2026-10-29

可以用來做什麼

  • 檢索圖譜中的頁面、區塊或待辦任務
  • 整理查詢結果並草擬頁面或區塊更新
  • 為本地 Logseq 自動化規劃受限的只讀橋接方式

什麼時候用

  • Logseq 正在本機執行且 API 已安全啟用時
  • 橋接僅限可信本地環境和明確允許的操作時
  • 刪除或批次變更前已有備份並確認變更時

示例提示詞

以下是根據技能文件生成的示例,不代表實際執行結果。

只讀取指定 Logseq 頁面並彙總其內容,不修改或刪除頁面、區塊,也不要建立通用 HTTP/IPC 橋接。

月度資料趨勢

累計下載4720
3730426247932026-05 · 累計下載 38032026-07 · 累計下載 42092026-08 · 累計下載 42672026-09 · 累計下載 472026-0526-09
星標6
5672026-05 · 星標 62026-07 · 星標 62026-08 · 星標 62026-09 · 星標 626-0526-09

2026-09 起統計方法調整:同名技能按作者分別統計,並覆蓋全部技能。圖中虛線為調整前的月份,與之後的資料不直接比較,也不計算跨越調整的增長。

月份累計下載環比星標
2026-094720—6
2026-084267+1.4%6
2026-074209—6
2026-053803—6

SKILL.md 原文

以下是作者釋出的原始檔案,按純文字顯示,本站未做修改或稽核;其中的連結不可點選,命令請核實後再執行。抓取於 2026-10-23。

7.4 KB · ClawHub v1.0.0
---
name: logseq
description: Provide commands for interacting with a local Logseq instance through its Plugin API. Use for creating pages, inserting blocks, querying the graph database, managing tasks, retrieving content, or automating workflows in Logseq. Only works with a locally running instance with the API enabled; default port or set path expected for [$API accessible skill].
---

# Logseq Plugin API

Interact with your local Logseq instance through its JavaScript Plugin API. This skill enables reading, writing, querying, and automating workflows in your Logseq graph.

## Prerequisites
展開全部(共 248 行)

**Logseq must be running locally** with a plugin that exposes the API. The standard way is:

1. **Install a bridge plugin** that exposes `logseq` API via HTTP (e.g., via a custom plugin or localhost endpoint)
2. **Alternative**: Use Node.js with `@logseq/libs` package to script against the running Logseq instance

The API is primarily designed for in-browser plugins, so accessing it from external scripts requires a bridge/proxy.

## Core API Namespaces

The Logseq Plugin API is organized into these main proxies:

### `logseq.App`
Application-level operations: getting app info, user configs, current graph, commands, UI state, external links.

**Key methods:**
- `getInfo()` - Get app version and info
- `getUserConfigs()` - Get user preferences (theme, format, language, etc.)
- `getCurrentGraph()` - Get current graph info (name, path, URL)
- `registerCommand(type, opts, action)` - Register custom commands
- `pushState(route, params, query)` - Navigate to routes

### `logseq.Editor`
Block and page editing operations: creating, updating, moving, querying content.

**Key methods:**
- `getBlock(uuid)` - Get block by UUID
- `getCurrentPage()` - Get current page entity
- `getCurrentPageBlocksTree()` - Get all blocks on current page
- `getPageBlocksTree(page)` - Get all blocks for a specific page
- `insertBlock(target, content, opts)` - Insert a new block
- `updateBlock(uuid, content)` - Update block content
- `createPage(pageName, properties, opts)` - Create a new page
- `deletePage(pageName)` - Delete a page
- `getPageLinkedReferences(page)` - Get backlinks to a page
- `registerSlashCommand(tag, action)` - Add custom slash commands

### `logseq.DB`
Database queries using Datalog.

**Key methods:**
- `q(query, ...inputs)` - Run Datalog query
- `datascriptQuery(query, ...inputs)` - Direct Datascript query

### `logseq.UI`
UI operations: messages, dialogs, main UI visibility.

**Key methods:**
- `showMsg(content, status)` - Show toast notification
- `queryElementById(id)` - Query DOM elements

### `logseq.Git`
Git operations for the current graph.

**Key methods:**
- `execCommand(args)` - Execute git command

### `logseq.Assets`
Asset management.

**Key methods:**
- `listFilesOfCurrentGraph(path)` - List files in graph

## Common Workflows

### Read Content

```javascript
// Get current page
const page = await logseq.Editor.getCurrentPage();

// Get all blocks on a page
const blocks = await logseq.Editor.getPageBlocksTree('Daily Notes');

// Get a specific block
const block = await logseq.Editor.getBlock('block-uuid-here');

// Query with Datalog
const results = await logseq.DB.q(`
  [:find (pull ?b [*])
   :where [?b :block/marker "TODO"]]
`);
```

### Write Content

```javascript
// Create a new page
await logseq.Editor.createPage('Project Notes', {
  tags: 'project',
  status: 'active'
}, { redirect: false });

// Insert a block
const block = await logseq.Editor.insertBlock(
  'target-block-uuid',
  '- New task item',
  { before: false, sibling: true }
);

// Update a block
await logseq.Editor.updateBlock('block-uuid', 'Updated content');

// Batch insert multiple blocks
const blocks = [
  { content: 'First item' },
  { content: 'Second item', children: [
    { content: 'Nested item' }
  ]}
];
await logseq.Editor.insertBatchBlock('parent-uuid', blocks, { sibling: false });
```

### Task Management

```javascript
// Find all TODO items
const todos = await logseq.DB.q(`
  [:find (pull ?b [*])
   :where
   [?b :block/marker ?marker]
   [(contains? #{"TODO" "DOING"} ?marker)]]
`);

// Mark task as DONE
await logseq.Editor.updateBlock('task-uuid', 'DONE Task content');

// Get tasks on current page
const page = await logseq.Editor.getCurrentPage();
const blocks = await logseq.Editor.getPageBlocksTree(page.name);
const tasks = blocks.filter(b => b.marker === 'TODO' || b.marker === 'DOING');
```

### Navigation and UI

```javascript
// Navigate to a page
logseq.App.pushState('page', { name: 'Project Notes' });

// Show notification
logseq.UI.showMsg('✅ Task completed!', 'success');

// Get app config
const configs = await logseq.App.getUserConfigs();
console.log('Theme:', configs.preferredThemeMode);
console.log('Format:', configs.preferredFormat);
```

## Implementation Approaches

Since Logseq's Plugin API is browser-based, you have several options:

### Option 1: Bridge Plugin
Create a minimal Logseq plugin that exposes API calls via HTTP:

```javascript
// In Logseq plugin (index.js)
logseq.ready(() => {
  // Expose API endpoints
  logseq.provideModel({
    async handleAPICall({ method, args }) {
      return await logseq.Editor[method](...args);
    }
  });
});

// Then call from external script via HTTP POST
```

### Option 2: Node.js Script with @logseq/libs
For automation scripts, use the `@logseq/libs` package:

```bash
npm install @logseq/libs
```

**Note:** This requires a running Logseq instance and proper connection setup.

### Option 3: Direct Plugin Development
Develop a full Logseq plugin following the plugin samples at:
https://github.com/logseq/logseq-plugin-samples

## API Reference

For complete API documentation, see:
- **API Docs**: https://logseq.github.io/plugins/
- **Plugin Samples**: https://github.com/logseq/logseq-plugin-samples
- **Type Definitions**: `references/api-types.md` (extracted from `@logseq/libs`)

## Key Data Structures

### BlockEntity
```typescript
{
  id: number,           // Entity ID
  uuid: string,         // Block UUID
  content: string,      // Block content
  format: 'markdown' | 'org',
  page: { id: number }, // Parent page
  parent: { id: number }, // Parent block
  left: { id: number }, // Previous sibling
  properties: {},       // Block properties
  marker?: string,      // TODO/DOING/DONE
  children?: []         // Child blocks
}
```

### PageEntity
```typescript
{
  id: number,
  uuid: string,
  name: string,              // Page name (lowercase)
  originalName: string,       // Original case
  'journal?': boolean,
  properties: {},
  journalDay?: number,       // YYYYMMDD for journals
}
```

## Tips & Best Practices

1. **Always check for null**: API methods may return `null` if entity doesn't exist
2. **Use UUIDs over IDs**: Block UUIDs are stable, entity IDs can change
3. **Batch operations**: Use `insertBatchBlock` for multiple inserts
4. **Query efficiently**: Datalog queries are powerful but can be slow on large graphs
5. **Properties are objects**: Access with `block.properties.propertyName`
6. **Format matters**: Respect user's preferred format (markdown vs org-mode)
7. **Async all the way**: All API calls return Promises

## Common Gotchas

- **Page names are lowercase**: When querying, use lowercase page names
- **Journal pages**: Use `journalDay` format (YYYYMMDD) not date strings
- **Block hierarchy**: Respect parent/child relationships when inserting
- **Format differences**: Markdown uses `-` for bullets, Org uses `*`
- **Properties syntax**: Different between markdown (`prop::`) and org (`:PROPERTIES:`)

「知識管理」分類下的熱門技能

資料月份:2026-09 · 下載/星標/安裝數聚合自公開技能註冊庫(ClawHub、SkillHub),按月更新。口徑說明見資料方法。