aiden-runtime 3.19.5 → 3.19.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/api/server.js +24 -25
- package/dist/core/agentLoop.js +8 -6
- package/dist/core/aidenPersonality.js +20 -3
- package/dist/core/protectedContext.js +15 -2
- package/dist/core/skillLoader.js +2 -0
- package/dist/core/skillTeacher.js +18 -5
- package/dist/core/version.js +1 -1
- package/dist-bundle/cli.js +50 -18
- package/dist-bundle/index.js +73 -35
- package/package.json +2 -1
- package/scripts/postinstall.js +70 -1
- package/workspace-templates/HEARTBEAT.md +16 -0
- package/workspace-templates/SOUL.md +267 -0
- package/workspace-templates/STANDING_ORDERS.md +21 -0
- package/workspace-templates/permissions.yaml +180 -0
- package/workspace-templates/skills/architecture-diagram/SKILL.md +126 -0
- package/workspace-templates/skills/architecture-diagram/skill.json +25 -0
- package/workspace-templates/skills/arxiv/SKILL.md +124 -0
- package/workspace-templates/skills/arxiv/skill.json +26 -0
- package/workspace-templates/skills/ascii-art/SKILL.md +142 -0
- package/workspace-templates/skills/ascii-art/skill.json +26 -0
- package/workspace-templates/skills/blogwatcher/SKILL.md +147 -0
- package/workspace-templates/skills/blogwatcher/skill.json +26 -0
- package/workspace-templates/skills/censys/SKILL.md +104 -0
- package/workspace-templates/skills/censys/index.ts +133 -0
- package/workspace-templates/skills/censys/skill.json +25 -0
- package/workspace-templates/skills/clipboard-history/SKILL.md +101 -0
- package/workspace-templates/skills/clipboard-history/skill.json +23 -0
- package/workspace-templates/skills/crt-sh/SKILL.md +102 -0
- package/workspace-templates/skills/crt-sh/index.ts +59 -0
- package/workspace-templates/skills/crt-sh/skill.json +25 -0
- package/workspace-templates/skills/cveapi/SKILL.md +114 -0
- package/workspace-templates/skills/cveapi/index.ts +249 -0
- package/workspace-templates/skills/cveapi/skill.json +25 -0
- package/workspace-templates/skills/docker-management/SKILL.md +156 -0
- package/workspace-templates/skills/docker-management/skill.json +25 -0
- package/workspace-templates/skills/excalidraw/SKILL.md +148 -0
- package/workspace-templates/skills/excalidraw/skill.json +25 -0
- package/workspace-templates/skills/explainshell/SKILL.md +93 -0
- package/workspace-templates/skills/explainshell/index.ts +132 -0
- package/workspace-templates/skills/explainshell/skill.json +25 -0
- package/workspace-templates/skills/financial_research/SKILL.md +21 -0
- package/workspace-templates/skills/financial_research/skill.json +24 -0
- package/workspace-templates/skills/gif-search/SKILL.md +122 -0
- package/workspace-templates/skills/gif-search/skill.json +25 -0
- package/workspace-templates/skills/github-auth/SKILL.md +134 -0
- package/workspace-templates/skills/github-auth/skill.json +26 -0
- package/workspace-templates/skills/github-issues/SKILL.md +130 -0
- package/workspace-templates/skills/github-issues/skill.json +25 -0
- package/workspace-templates/skills/github-pr-workflow/SKILL.md +143 -0
- package/workspace-templates/skills/github-pr-workflow/skill.json +26 -0
- package/workspace-templates/skills/github-repo-management/SKILL.md +147 -0
- package/workspace-templates/skills/github-repo-management/skill.json +26 -0
- package/workspace-templates/skills/google-workspace/SKILL.md +110 -0
- package/workspace-templates/skills/google-workspace/skill.json +26 -0
- package/workspace-templates/skills/greynoise/SKILL.md +96 -0
- package/workspace-templates/skills/greynoise/index.ts +107 -0
- package/workspace-templates/skills/greynoise/skill.json +25 -0
- package/workspace-templates/skills/haveibeenpwned/SKILL.md +100 -0
- package/workspace-templates/skills/haveibeenpwned/index.ts +72 -0
- package/workspace-templates/skills/haveibeenpwned/skill.json +24 -0
- package/workspace-templates/skills/jupyter-live-kernel/SKILL.md +116 -0
- package/workspace-templates/skills/jupyter-live-kernel/skill.json +25 -0
- package/workspace-templates/skills/linear/SKILL.md +107 -0
- package/workspace-templates/skills/linear/skill.json +25 -0
- package/workspace-templates/skills/nano-pdf/SKILL.md +113 -0
- package/workspace-templates/skills/nano-pdf/skill.json +26 -0
- package/workspace-templates/skills/notion/SKILL.md +108 -0
- package/workspace-templates/skills/notion/skill.json +24 -0
- package/workspace-templates/skills/obsidian/SKILL.md +115 -0
- package/workspace-templates/skills/obsidian/skill.json +24 -0
- package/workspace-templates/skills/ocr-and-documents/SKILL.md +125 -0
- package/workspace-templates/skills/ocr-and-documents/skill.json +26 -0
- package/workspace-templates/skills/p5js/SKILL.md +163 -0
- package/workspace-templates/skills/p5js/skill.json +24 -0
- package/workspace-templates/skills/research-paper-writing/SKILL.md +158 -0
- package/workspace-templates/skills/research-paper-writing/skill.json +26 -0
- package/workspace-templates/skills/securityheaders/SKILL.md +99 -0
- package/workspace-templates/skills/securityheaders/index.ts +213 -0
- package/workspace-templates/skills/securityheaders/skill.json +26 -0
- package/workspace-templates/skills/shodan/SKILL.md +113 -0
- package/workspace-templates/skills/shodan/index.ts +94 -0
- package/workspace-templates/skills/shodan/skill.json +26 -0
- package/workspace-templates/skills/songsee/SKILL.md +152 -0
- package/workspace-templates/skills/songsee/skill.json +25 -0
- package/workspace-templates/skills/ssllabs/SKILL.md +107 -0
- package/workspace-templates/skills/ssllabs/index.ts +208 -0
- package/workspace-templates/skills/ssllabs/skill.json +27 -0
- package/workspace-templates/skills/stable-diffusion-image-generation/SKILL.md +136 -0
- package/workspace-templates/skills/stable-diffusion-image-generation/skill.json +24 -0
- package/workspace-templates/skills/systematic-debugging/SKILL.md +131 -0
- package/workspace-templates/skills/systematic-debugging/skill.json +25 -0
- package/workspace-templates/skills/test-driven-development/SKILL.md +164 -0
- package/workspace-templates/skills/test-driven-development/skill.json +25 -0
- package/workspace-templates/skills/urlscan/SKILL.md +118 -0
- package/workspace-templates/skills/urlscan/index.ts +94 -0
- package/workspace-templates/skills/urlscan/skill.json +24 -0
- package/workspace-templates/skills/virustotal/SKILL.md +120 -0
- package/workspace-templates/skills/virustotal/index.ts +124 -0
- package/workspace-templates/skills/virustotal/skill.json +26 -0
- package/workspace-templates/skills/web_research/SKILL.md +18 -0
- package/workspace-templates/skills/web_research/skill.json +20 -0
- package/workspace-templates/skills/xitter/SKILL.md +148 -0
- package/workspace-templates/skills/xitter/skill.json +26 -0
- package/workspace-templates/skills/youtube-content/SKILL.md +121 -0
- package/workspace-templates/skills/youtube-content/skill.json +25 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "linear",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Manage Linear issues, projects, and cycles via the Linear GraphQL API",
|
|
5
|
+
"author": "aiden",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"tools": [],
|
|
8
|
+
"trigger_phrases": [],
|
|
9
|
+
"compatible_agents": [
|
|
10
|
+
"aiden"
|
|
11
|
+
],
|
|
12
|
+
"min_agent_version": "3.0.0",
|
|
13
|
+
"tags": [
|
|
14
|
+
"linear",
|
|
15
|
+
"issues",
|
|
16
|
+
"project-management",
|
|
17
|
+
"graphql",
|
|
18
|
+
"engineering",
|
|
19
|
+
"sprint",
|
|
20
|
+
"cycle",
|
|
21
|
+
"team",
|
|
22
|
+
"tasks"
|
|
23
|
+
],
|
|
24
|
+
"created": "2026-04-27T17:11:39.895Z"
|
|
25
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: nano-pdf
|
|
3
|
+
description: Edit PDFs with natural-language instructions using the nano-pdf CLI tool
|
|
4
|
+
category: productivity
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
origin: aiden
|
|
7
|
+
license: Apache-2.0
|
|
8
|
+
tags: pdf, edit, merge, split, compress, redact, nano-pdf, cli, document, watermark
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# nano-pdf — Natural-Language PDF Editing
|
|
12
|
+
|
|
13
|
+
Use the `nano-pdf` CLI to perform common PDF operations — merge, split, compress, add watermarks, redact text, and more — via simple natural-language or flag-based commands.
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- User wants to merge multiple PDFs into one
|
|
18
|
+
- User wants to split a PDF into individual pages or page ranges
|
|
19
|
+
- User wants to compress a large PDF to reduce file size
|
|
20
|
+
- User wants to add a watermark or page numbers to a PDF
|
|
21
|
+
- User wants to redact or remove specific pages
|
|
22
|
+
|
|
23
|
+
## How to Use
|
|
24
|
+
|
|
25
|
+
### 1. Install nano-pdf
|
|
26
|
+
|
|
27
|
+
```powershell
|
|
28
|
+
pip install nano-pdf
|
|
29
|
+
# Verify installation
|
|
30
|
+
nano-pdf --version
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 2. Merge multiple PDFs
|
|
34
|
+
|
|
35
|
+
```powershell
|
|
36
|
+
nano-pdf merge report1.pdf report2.pdf appendix.pdf --output merged.pdf
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 3. Split a PDF into individual pages
|
|
40
|
+
|
|
41
|
+
```powershell
|
|
42
|
+
# Split every page into a separate file
|
|
43
|
+
nano-pdf split document.pdf --output ./pages/
|
|
44
|
+
|
|
45
|
+
# Split a specific range into a new file
|
|
46
|
+
nano-pdf split document.pdf --pages 1-5 --output extract.pdf
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 4. Compress a PDF
|
|
50
|
+
|
|
51
|
+
```powershell
|
|
52
|
+
# Default compression
|
|
53
|
+
nano-pdf compress large_file.pdf --output compressed.pdf
|
|
54
|
+
|
|
55
|
+
# Aggressive compression (lower image quality)
|
|
56
|
+
nano-pdf compress large_file.pdf --level high --output compressed.pdf
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 5. Add a watermark
|
|
60
|
+
|
|
61
|
+
```powershell
|
|
62
|
+
nano-pdf watermark input.pdf --text "CONFIDENTIAL" --output watermarked.pdf
|
|
63
|
+
# Custom font size and opacity
|
|
64
|
+
nano-pdf watermark input.pdf --text "DRAFT" --size 60 --opacity 0.3 --output draft.pdf
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 6. Add page numbers
|
|
68
|
+
|
|
69
|
+
```powershell
|
|
70
|
+
nano-pdf number input.pdf --position bottom-right --output numbered.pdf
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 7. Remove specific pages
|
|
74
|
+
|
|
75
|
+
```powershell
|
|
76
|
+
# Remove pages 3 and 7 from a 10-page PDF
|
|
77
|
+
nano-pdf remove input.pdf --pages 3,7 --output trimmed.pdf
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 8. Rotate pages
|
|
81
|
+
|
|
82
|
+
```powershell
|
|
83
|
+
# Rotate all pages 90 degrees clockwise
|
|
84
|
+
nano-pdf rotate input.pdf --degrees 90 --output rotated.pdf
|
|
85
|
+
|
|
86
|
+
# Rotate only page 2
|
|
87
|
+
nano-pdf rotate input.pdf --degrees 180 --pages 2 --output rotated.pdf
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### 9. Extract images from a PDF
|
|
91
|
+
|
|
92
|
+
```powershell
|
|
93
|
+
nano-pdf extract-images input.pdf --output ./images/
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Examples
|
|
97
|
+
|
|
98
|
+
**"Merge contract.pdf and appendix.pdf into one file"**
|
|
99
|
+
→ Use step 2: `nano-pdf merge contract.pdf appendix.pdf --output final_contract.pdf`
|
|
100
|
+
|
|
101
|
+
**"Compress this 50MB report so I can email it"**
|
|
102
|
+
→ Use step 4 with `--level high` to aggressively reduce size.
|
|
103
|
+
|
|
104
|
+
**"Split the quarterly report — I only need pages 10 to 15"**
|
|
105
|
+
→ Use step 3 with `--pages 10-15`.
|
|
106
|
+
|
|
107
|
+
## Cautions
|
|
108
|
+
|
|
109
|
+
- nano-pdf preserves PDF/A compliance when the input is already PDF/A — check if needed for legal documents
|
|
110
|
+
- Aggressive compression (`--level high`) reduces image resolution — not suitable for print-quality output
|
|
111
|
+
- Encrypted or password-protected PDFs cannot be processed without first removing the password
|
|
112
|
+
- Very large PDFs (> 200 MB) may require chunked processing — split first, process, then merge
|
|
113
|
+
- nano-pdf is a Python package — confirm it is installed before use (`pip show nano-pdf`)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "nano-pdf",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Edit PDFs with natural-language instructions using the nano-pdf CLI tool",
|
|
5
|
+
"author": "aiden",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"tools": [],
|
|
8
|
+
"trigger_phrases": [],
|
|
9
|
+
"compatible_agents": [
|
|
10
|
+
"aiden"
|
|
11
|
+
],
|
|
12
|
+
"min_agent_version": "3.0.0",
|
|
13
|
+
"tags": [
|
|
14
|
+
"pdf",
|
|
15
|
+
"edit",
|
|
16
|
+
"merge",
|
|
17
|
+
"split",
|
|
18
|
+
"compress",
|
|
19
|
+
"redact",
|
|
20
|
+
"nano-pdf",
|
|
21
|
+
"cli",
|
|
22
|
+
"document",
|
|
23
|
+
"watermark"
|
|
24
|
+
],
|
|
25
|
+
"created": "2026-04-27T17:11:39.938Z"
|
|
26
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: notion
|
|
3
|
+
description: Read, create, and update Notion pages and databases via the Notion REST API
|
|
4
|
+
category: productivity
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
origin: aiden
|
|
7
|
+
license: Apache-2.0
|
|
8
|
+
tags: notion, notes, database, pages, workspace, api, knowledge-base, tasks
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Notion API Integration
|
|
12
|
+
|
|
13
|
+
Interact with Notion workspaces through the official REST API. Requires an Internal Integration token (`NOTION_TOKEN`) and pages/databases shared with that integration.
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- User wants to read content from a Notion page
|
|
18
|
+
- User wants to create a new page or database entry
|
|
19
|
+
- User wants to query a Notion database with filters
|
|
20
|
+
- User wants to append blocks to an existing page
|
|
21
|
+
- User wants to search across their Notion workspace
|
|
22
|
+
|
|
23
|
+
## How to Use
|
|
24
|
+
|
|
25
|
+
### 1. Set up the integration token
|
|
26
|
+
|
|
27
|
+
The user must create an Internal Integration at https://www.notion.so/my-integrations and share their pages/databases with it.
|
|
28
|
+
|
|
29
|
+
```powershell
|
|
30
|
+
# Set token in session (or add to .env)
|
|
31
|
+
$env:NOTION_TOKEN = "ntn_..."
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 2. Search workspace
|
|
35
|
+
|
|
36
|
+
```powershell
|
|
37
|
+
$headers = @{ "Authorization" = "Bearer $env:NOTION_TOKEN"; "Notion-Version" = "2022-06-28"; "Content-Type" = "application/json" }
|
|
38
|
+
$body = '{"query": "meeting notes"}'
|
|
39
|
+
$resp = Invoke-RestMethod -Uri "https://api.notion.com/v1/search" -Method Post -Headers $headers -Body $body
|
|
40
|
+
$resp.results | Select-Object -ExpandProperty properties | ConvertTo-Json -Depth 5
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 3. Read a page
|
|
44
|
+
|
|
45
|
+
```powershell
|
|
46
|
+
$pageId = "your-page-id" # from Notion URL: notion.so/Page-Title-<pageId>
|
|
47
|
+
$headers = @{ "Authorization" = "Bearer $env:NOTION_TOKEN"; "Notion-Version" = "2022-06-28" }
|
|
48
|
+
$page = Invoke-RestMethod -Uri "https://api.notion.com/v1/pages/$pageId" -Headers $headers
|
|
49
|
+
$blocks = Invoke-RestMethod -Uri "https://api.notion.com/v1/blocks/$pageId/children" -Headers $headers
|
|
50
|
+
$blocks.results | ForEach-Object { $_.paragraph.rich_text.plain_text }
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 4. Query a database
|
|
54
|
+
|
|
55
|
+
```powershell
|
|
56
|
+
$dbId = "your-database-id"
|
|
57
|
+
$headers = @{ "Authorization" = "Bearer $env:NOTION_TOKEN"; "Notion-Version" = "2022-06-28"; "Content-Type" = "application/json" }
|
|
58
|
+
$filter = '{"filter": {"property": "Status", "select": {"equals": "In Progress"}}}'
|
|
59
|
+
$resp = Invoke-RestMethod -Uri "https://api.notion.com/v1/databases/$dbId/query" -Method Post -Headers $headers -Body $filter
|
|
60
|
+
$resp.results | ForEach-Object { $_.properties.Name.title.plain_text }
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 5. Create a page in a database
|
|
64
|
+
|
|
65
|
+
```powershell
|
|
66
|
+
$dbId = "your-database-id"
|
|
67
|
+
$headers = @{ "Authorization" = "Bearer $env:NOTION_TOKEN"; "Notion-Version" = "2022-06-28"; "Content-Type" = "application/json" }
|
|
68
|
+
$payload = @{
|
|
69
|
+
parent = @{ database_id = $dbId }
|
|
70
|
+
properties = @{
|
|
71
|
+
Name = @{ title = @(@{ text = @{ content = "My New Page" } }) }
|
|
72
|
+
}
|
|
73
|
+
} | ConvertTo-Json -Depth 10
|
|
74
|
+
Invoke-RestMethod -Uri "https://api.notion.com/v1/pages" -Method Post -Headers $headers -Body $payload
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 6. Append text blocks to a page
|
|
78
|
+
|
|
79
|
+
```powershell
|
|
80
|
+
$pageId = "your-page-id"
|
|
81
|
+
$headers = @{ "Authorization" = "Bearer $env:NOTION_TOKEN"; "Notion-Version" = "2022-06-28"; "Content-Type" = "application/json" }
|
|
82
|
+
$payload = @{
|
|
83
|
+
children = @(@{
|
|
84
|
+
object = "block"
|
|
85
|
+
type = "paragraph"
|
|
86
|
+
paragraph = @{ rich_text = @(@{ type = "text"; text = @{ content = "Appended content here." } }) }
|
|
87
|
+
})
|
|
88
|
+
} | ConvertTo-Json -Depth 10
|
|
89
|
+
Invoke-RestMethod -Uri "https://api.notion.com/v1/blocks/$pageId/children" -Method Patch -Headers $headers -Body $payload
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Examples
|
|
93
|
+
|
|
94
|
+
**"Show me all In Progress tasks in my Notion project database"**
|
|
95
|
+
→ Use step 4 with a Status filter. Ask for database ID from the Notion URL.
|
|
96
|
+
|
|
97
|
+
**"Create a new meeting notes page in Notion for today"**
|
|
98
|
+
→ Use step 5 to create a page, then step 6 to append an agenda block.
|
|
99
|
+
|
|
100
|
+
**"Search my Notion workspace for anything about Q2 planning"**
|
|
101
|
+
→ Use step 2 with query `Q2 planning`.
|
|
102
|
+
|
|
103
|
+
## Cautions
|
|
104
|
+
|
|
105
|
+
- Integration must be explicitly shared with each page/database — it won't see everything by default
|
|
106
|
+
- Page IDs are the 32-character hex string at the end of Notion URLs
|
|
107
|
+
- API rate limit is 3 requests/second per integration — add delays for bulk operations
|
|
108
|
+
- Rich text properties have nested structure — always check `rich_text[0].plain_text` for text values
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "notion",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Read, create, and update Notion pages and databases via the Notion REST API",
|
|
5
|
+
"author": "aiden",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"tools": [],
|
|
8
|
+
"trigger_phrases": [],
|
|
9
|
+
"compatible_agents": [
|
|
10
|
+
"aiden"
|
|
11
|
+
],
|
|
12
|
+
"min_agent_version": "3.0.0",
|
|
13
|
+
"tags": [
|
|
14
|
+
"notion",
|
|
15
|
+
"notes",
|
|
16
|
+
"database",
|
|
17
|
+
"pages",
|
|
18
|
+
"workspace",
|
|
19
|
+
"api",
|
|
20
|
+
"knowledge-base",
|
|
21
|
+
"tasks"
|
|
22
|
+
],
|
|
23
|
+
"created": "2026-04-27T17:11:39.995Z"
|
|
24
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: obsidian
|
|
3
|
+
description: Read, search, and create notes in Obsidian vaults using file system operations and CLI tools
|
|
4
|
+
category: productivity
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
origin: aiden
|
|
7
|
+
license: Apache-2.0
|
|
8
|
+
tags: obsidian, notes, vault, markdown, knowledge-base, zettelkasten, wiki, pkm
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Obsidian Vault Operations
|
|
12
|
+
|
|
13
|
+
Interact with Obsidian vaults directly through the file system. Obsidian notes are plain Markdown files, so you can read, search, create, and link notes without launching the Obsidian app.
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- User wants to search notes across an Obsidian vault
|
|
18
|
+
- User wants to create a new note in a specific vault folder
|
|
19
|
+
- User wants to find all notes tagged with a given tag
|
|
20
|
+
- User wants to read a specific note by name
|
|
21
|
+
- User wants to find backlinks or internal wiki-links across notes
|
|
22
|
+
|
|
23
|
+
## How to Use
|
|
24
|
+
|
|
25
|
+
### 1. Locate the vault
|
|
26
|
+
|
|
27
|
+
Obsidian vaults are folders containing `.md` files and a `.obsidian/` config dir. Ask the user for the vault path or search common locations.
|
|
28
|
+
|
|
29
|
+
```powershell
|
|
30
|
+
# Find Obsidian vaults on Windows (searches common locations)
|
|
31
|
+
Get-ChildItem "$env:USERPROFILE" -Recurse -Filter ".obsidian" -Directory -ErrorAction SilentlyContinue |
|
|
32
|
+
Select-Object -ExpandProperty Parent | Select-Object FullName
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### 2. Search notes by keyword
|
|
36
|
+
|
|
37
|
+
```powershell
|
|
38
|
+
# Full-text search across all notes in vault
|
|
39
|
+
$vault = "C:\Users\shiva\Documents\MyVault"
|
|
40
|
+
Get-ChildItem $vault -Recurse -Filter "*.md" |
|
|
41
|
+
Select-String -Pattern "your keyword" -SimpleMatch |
|
|
42
|
+
Select-Object Path, LineNumber, Line |
|
|
43
|
+
Format-Table -AutoSize
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 3. Search notes by tag
|
|
47
|
+
|
|
48
|
+
Obsidian tags appear as `#tag` in note body or `tags: [tag]` in frontmatter.
|
|
49
|
+
|
|
50
|
+
```powershell
|
|
51
|
+
$vault = "C:\Users\shiva\Documents\MyVault"
|
|
52
|
+
$tag = "project"
|
|
53
|
+
Get-ChildItem $vault -Recurse -Filter "*.md" |
|
|
54
|
+
Select-String -Pattern "#$tag\b|tags:.*\b$tag\b" -SimpleMatch:$false |
|
|
55
|
+
Select-Object Path | Sort-Object Path -Unique
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 4. Read a specific note
|
|
59
|
+
|
|
60
|
+
```powershell
|
|
61
|
+
$note = "C:\Users\shiva\Documents\MyVault\Daily\2026-04-17.md"
|
|
62
|
+
Get-Content $note -Raw
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 5. Create a new note
|
|
66
|
+
|
|
67
|
+
```powershell
|
|
68
|
+
$vault = "C:\Users\shiva\Documents\MyVault"
|
|
69
|
+
$folder = "Projects"
|
|
70
|
+
$title = "New Project Idea"
|
|
71
|
+
$date = Get-Date -Format "yyyy-MM-dd"
|
|
72
|
+
$content = @"
|
|
73
|
+
---
|
|
74
|
+
title: $title
|
|
75
|
+
date: $date
|
|
76
|
+
tags: [project, idea]
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
# $title
|
|
80
|
+
|
|
81
|
+
Write your note content here.
|
|
82
|
+
"@
|
|
83
|
+
$path = Join-Path $vault $folder "$title.md"
|
|
84
|
+
New-Item -ItemType Directory -Force -Path (Split-Path $path) | Out-Null
|
|
85
|
+
Set-Content -Path $path -Value $content -Encoding UTF8
|
|
86
|
+
Write-Host "Created: $path"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 6. Find all backlinks to a note
|
|
90
|
+
|
|
91
|
+
```powershell
|
|
92
|
+
$vault = "C:\Users\shiva\Documents\MyVault"
|
|
93
|
+
$noteName = "Index" # without .md
|
|
94
|
+
Get-ChildItem $vault -Recurse -Filter "*.md" |
|
|
95
|
+
Select-String -Pattern "\[\[$noteName(\|[^\]]*)?\]\]" |
|
|
96
|
+
Select-Object Path | Sort-Object Path -Unique
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Examples
|
|
100
|
+
|
|
101
|
+
**"Search my Obsidian vault for notes about async/await"**
|
|
102
|
+
→ Use step 2 with keyword `async/await`. Ask user for vault path first if not known.
|
|
103
|
+
|
|
104
|
+
**"Create a daily note for today in my vault"**
|
|
105
|
+
→ Use step 5 with folder `Daily`, title as today's date `2026-04-17`, and standard daily note frontmatter.
|
|
106
|
+
|
|
107
|
+
**"Find all notes tagged #book-review in my vault"**
|
|
108
|
+
→ Use step 3 with tag `book-review`.
|
|
109
|
+
|
|
110
|
+
## Cautions
|
|
111
|
+
|
|
112
|
+
- Never delete notes without explicit user confirmation — deletions are hard to recover
|
|
113
|
+
- Obsidian vaults can be very large; use `-Recurse` with care on deep vault trees
|
|
114
|
+
- The `.obsidian/` directory contains config/plugins — do not modify it
|
|
115
|
+
- If the user has Obsidian open, writing files simultaneously is safe (Obsidian watches for changes), but avoid writing the same file from two places at once
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "obsidian",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Read, search, and create notes in Obsidian vaults using file system operations and CLI tools",
|
|
5
|
+
"author": "aiden",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"tools": [],
|
|
8
|
+
"trigger_phrases": [],
|
|
9
|
+
"compatible_agents": [
|
|
10
|
+
"aiden"
|
|
11
|
+
],
|
|
12
|
+
"min_agent_version": "3.0.0",
|
|
13
|
+
"tags": [
|
|
14
|
+
"obsidian",
|
|
15
|
+
"notes",
|
|
16
|
+
"vault",
|
|
17
|
+
"markdown",
|
|
18
|
+
"knowledge-base",
|
|
19
|
+
"zettelkasten",
|
|
20
|
+
"wiki",
|
|
21
|
+
"pkm"
|
|
22
|
+
],
|
|
23
|
+
"created": "2026-04-27T17:11:40.306Z"
|
|
24
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ocr-and-documents
|
|
3
|
+
description: Extract text from PDFs, images, scans, and Word documents using Python libraries and CLI tools
|
|
4
|
+
category: productivity
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
origin: aiden
|
|
7
|
+
license: Apache-2.0
|
|
8
|
+
tags: ocr, pdf, image, text-extraction, documents, docx, scan, pymupdf, tesseract, pdf-parse
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# OCR and Document Text Extraction
|
|
12
|
+
|
|
13
|
+
Extract readable text from PDFs, scanned images, and Word documents using Python libraries available in most environments. No cloud API required.
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- User wants to read text from a PDF file
|
|
18
|
+
- User wants to extract text from a scanned image or photo of a document
|
|
19
|
+
- User wants to read a `.docx` Word document programmatically
|
|
20
|
+
- User wants to convert a multi-page document to plain text for analysis
|
|
21
|
+
- User wants to extract specific pages or sections from a PDF
|
|
22
|
+
|
|
23
|
+
## How to Use
|
|
24
|
+
|
|
25
|
+
### 1. Extract text from a PDF (pymupdf — fastest)
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
import fitz # pip install pymupdf
|
|
29
|
+
|
|
30
|
+
doc = fitz.open("document.pdf")
|
|
31
|
+
text = "\n\n".join(page.get_text() for page in doc)
|
|
32
|
+
print(text[:2000]) # preview first 2000 chars
|
|
33
|
+
doc.close()
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 2. Extract text from a PDF (pdf-parse via Node.js)
|
|
37
|
+
|
|
38
|
+
```javascript
|
|
39
|
+
// requires: npm install pdf-parse (already in DevOS dependencies)
|
|
40
|
+
const pdfParse = require('pdf-parse')
|
|
41
|
+
const fs = require('fs')
|
|
42
|
+
const data = await pdfParse(fs.readFileSync('document.pdf'))
|
|
43
|
+
console.log(data.text.slice(0, 2000))
|
|
44
|
+
console.log(`Pages: ${data.numpages}`)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 3. OCR a scanned image (Tesseract)
|
|
48
|
+
|
|
49
|
+
Requires Tesseract installed: `winget install UB-Mannheim.TesseractOCR`
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
import pytesseract # pip install pytesseract
|
|
53
|
+
from PIL import Image # pip install Pillow
|
|
54
|
+
|
|
55
|
+
img = Image.open("scan.png")
|
|
56
|
+
text = pytesseract.image_to_string(img, lang="eng")
|
|
57
|
+
print(text)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 4. OCR with preprocessing for better accuracy
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
import pytesseract
|
|
64
|
+
from PIL import Image, ImageFilter, ImageOps
|
|
65
|
+
|
|
66
|
+
img = Image.open("scan.jpg")
|
|
67
|
+
img = ImageOps.grayscale(img)
|
|
68
|
+
img = img.filter(ImageFilter.SHARPEN)
|
|
69
|
+
img = img.point(lambda p: 255 if p > 128 else 0) # binarize
|
|
70
|
+
text = pytesseract.image_to_string(img, config="--psm 6")
|
|
71
|
+
print(text)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 5. Extract text from a Word .docx file
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
from docx import Document # pip install python-docx
|
|
78
|
+
|
|
79
|
+
doc = Document("report.docx")
|
|
80
|
+
paras = [p.text for p in doc.paragraphs if p.text.strip()]
|
|
81
|
+
text = "\n".join(paras)
|
|
82
|
+
print(text)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 6. Extract a specific page range from a PDF
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
import fitz
|
|
89
|
+
|
|
90
|
+
doc = fitz.open("big_report.pdf")
|
|
91
|
+
pages = range(4, 9) # pages 5-9 (0-indexed)
|
|
92
|
+
text = "\n\n".join(doc[i].get_text() for i in pages)
|
|
93
|
+
print(text)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 7. Extract tables from a PDF
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
import pdfplumber # pip install pdfplumber
|
|
100
|
+
|
|
101
|
+
with pdfplumber.open("financial_report.pdf") as pdf:
|
|
102
|
+
for page in pdf.pages:
|
|
103
|
+
for table in page.extract_tables():
|
|
104
|
+
for row in table:
|
|
105
|
+
print("\t".join(str(cell or "") for cell in row))
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Examples
|
|
109
|
+
|
|
110
|
+
**"Read the text from this PDF contract"**
|
|
111
|
+
→ Use step 1 (pymupdf) or step 2 (pdf-parse) depending on whether Python or Node is preferred.
|
|
112
|
+
|
|
113
|
+
**"Extract the table from page 3 of this quarterly report PDF"**
|
|
114
|
+
→ Use step 7 (pdfplumber) targeting `pdf.pages[2]` for page 3.
|
|
115
|
+
|
|
116
|
+
**"Read the text from this scanned invoice image"**
|
|
117
|
+
→ Use step 3 or 4 (Tesseract). For low-quality scans, use step 4 with preprocessing.
|
|
118
|
+
|
|
119
|
+
## Cautions
|
|
120
|
+
|
|
121
|
+
- Scanned PDFs (image-only) have no embedded text — Tesseract OCR is required
|
|
122
|
+
- Tesseract accuracy drops on handwriting, decorative fonts, or low-resolution images (< 150 DPI)
|
|
123
|
+
- pymupdf (`fitz`) extracts only programmatically embedded text — it won't OCR scanned pages
|
|
124
|
+
- Large PDFs can use significant memory — process page by page for files > 100 MB
|
|
125
|
+
- For non-English text, specify the language code in Tesseract: `lang="hin"` for Hindi, `"deu"` for German
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ocr-and-documents",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Extract text from PDFs, images, scans, and Word documents using Python libraries and CLI tools",
|
|
5
|
+
"author": "aiden",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"tools": [],
|
|
8
|
+
"trigger_phrases": [],
|
|
9
|
+
"compatible_agents": [
|
|
10
|
+
"aiden"
|
|
11
|
+
],
|
|
12
|
+
"min_agent_version": "3.0.0",
|
|
13
|
+
"tags": [
|
|
14
|
+
"ocr",
|
|
15
|
+
"pdf",
|
|
16
|
+
"image",
|
|
17
|
+
"text-extraction",
|
|
18
|
+
"documents",
|
|
19
|
+
"docx",
|
|
20
|
+
"scan",
|
|
21
|
+
"pymupdf",
|
|
22
|
+
"tesseract",
|
|
23
|
+
"pdf-parse"
|
|
24
|
+
],
|
|
25
|
+
"created": "2026-04-27T17:11:40.330Z"
|
|
26
|
+
}
|