lobsidian 1.0.0
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/LICENSE +21 -0
- package/README.md +186 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +15 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.js +24 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/validate.d.ts +2 -0
- package/dist/commands/validate.js +35 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/lib/content.d.ts +11 -0
- package/dist/lib/content.js +80 -0
- package/dist/lib/content.js.map +1 -0
- package/dist/lib/frontmatter.d.ts +29 -0
- package/dist/lib/frontmatter.js +372 -0
- package/dist/lib/frontmatter.js.map +1 -0
- package/dist/lib/scaffold.d.ts +7 -0
- package/dist/lib/scaffold.js +105 -0
- package/dist/lib/scaffold.js.map +1 -0
- package/dist/lib/slug.d.ts +13 -0
- package/dist/lib/slug.js +96 -0
- package/dist/lib/slug.js.map +1 -0
- package/dist/lib/validate/checks.d.ts +23 -0
- package/dist/lib/validate/checks.js +777 -0
- package/dist/lib/validate/checks.js.map +1 -0
- package/dist/lib/validate/fix.d.ts +7 -0
- package/dist/lib/validate/fix.js +75 -0
- package/dist/lib/validate/fix.js.map +1 -0
- package/dist/lib/validate/index.d.ts +37 -0
- package/dist/lib/validate/index.js +88 -0
- package/dist/lib/validate/index.js.map +1 -0
- package/dist/lib/validate/report.d.ts +3 -0
- package/dist/lib/validate/report.js +77 -0
- package/dist/lib/validate/report.js.map +1 -0
- package/dist/lib/vault.d.ts +28 -0
- package/dist/lib/vault.js +119 -0
- package/dist/lib/vault.js.map +1 -0
- package/dist/lib/wikilink.d.ts +45 -0
- package/dist/lib/wikilink.js +156 -0
- package/dist/lib/wikilink.js.map +1 -0
- package/embedded/agent.md +91 -0
- package/embedded/config.md.tmpl +48 -0
- package/embedded/dashboard.md +35 -0
- package/embedded/domains/default.md.tmpl +44 -0
- package/embedded/examples/example-cdn-caching.md +53 -0
- package/embedded/examples/example-configure-cloudfront.md +56 -0
- package/embedded/examples/example-website-performance.md +36 -0
- package/embedded/gitignore +4 -0
- package/embedded/procedures/cascade.md +33 -0
- package/embedded/procedures/context-extraction.md +43 -0
- package/embedded/procedures/facilitation.md +43 -0
- package/embedded/procedures/review-cycle.md +47 -0
- package/embedded/start-here.md +60 -0
- package/embedded/templates/decision.md +29 -0
- package/embedded/templates/domain.md +46 -0
- package/embedded/templates/log.md +12 -0
- package/embedded/templates/motive.md +25 -0
- package/embedded/templates/note.md +13 -0
- package/embedded/templates/task.md +39 -0
- package/package.json +50 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Review Cycle
|
|
2
|
+
|
|
3
|
+
Load this procedure when a decision's `review_date` has been reached (`review_date <= today AND status: active`).
|
|
4
|
+
|
|
5
|
+
## Steps
|
|
6
|
+
|
|
7
|
+
### 1. Present the Review
|
|
8
|
+
|
|
9
|
+
Set decision `status: under-review`. Present conversationally:
|
|
10
|
+
|
|
11
|
+
*"It's been [N weeks] since we decided to [proposal]. Here's what happened: [outcomes from linked tasks]."*
|
|
12
|
+
|
|
13
|
+
### 2. Seek Feedback
|
|
14
|
+
|
|
15
|
+
*"Is there anything about this that isn't working, or something we should change?"*
|
|
16
|
+
|
|
17
|
+
### 3. Act on Response
|
|
18
|
+
|
|
19
|
+
**Still valid, meeting criteria:**
|
|
20
|
+
- Set `status: active`
|
|
21
|
+
- Advance `review_date`: `today + review_frequency` (from current date, not original review_date)
|
|
22
|
+
- Log: `"review confirmed, next review YYYY-MM-DD"`
|
|
23
|
+
|
|
24
|
+
**Still valid, not meeting criteria:**
|
|
25
|
+
- Propose amendments (minor: increment `version`) or supersession (substantive changes)
|
|
26
|
+
- Set `status: active` with advanced `review_date`
|
|
27
|
+
- Create new tasks if needed
|
|
28
|
+
|
|
29
|
+
**No longer needed:**
|
|
30
|
+
- Set decision `status: retired`
|
|
31
|
+
- Check if parent motive should be updated
|
|
32
|
+
- Archive the decision
|
|
33
|
+
|
|
34
|
+
### Escalation
|
|
35
|
+
|
|
36
|
+
Decisions overdue by 2x their `review_frequency` period: create a motive documenting the overdue review. This ensures overdue reviews are not silently ignored.
|
|
37
|
+
|
|
38
|
+
### Review Date Calculation
|
|
39
|
+
|
|
40
|
+
| Frequency | Advance by |
|
|
41
|
+
|-----------|-----------|
|
|
42
|
+
| weekly | 7 days |
|
|
43
|
+
| biweekly | 14 days |
|
|
44
|
+
| monthly | 1 month |
|
|
45
|
+
| quarterly | 3 months |
|
|
46
|
+
| biannually | 6 months |
|
|
47
|
+
| annually | 1 year |
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Welcome to Your Lobsidian Vault
|
|
2
|
+
|
|
3
|
+
Lobsidian is a structured knowledge system that helps you and your AI agents organize work, make decisions, and track what matters.
|
|
4
|
+
|
|
5
|
+
## How It Works
|
|
6
|
+
|
|
7
|
+
Everything traces a chain: a **motive** (why something matters) produces a **decision** (what to do about it), which breaks into **tasks** (concrete work). Decisions carry a review date, closing the loop.
|
|
8
|
+
|
|
9
|
+
## Folder Structure
|
|
10
|
+
|
|
11
|
+
| Folder | What goes here | Naming |
|
|
12
|
+
|--------|---------------|--------|
|
|
13
|
+
| `Motives/` | Problems to solve, opportunities to seize | `YYYY-MM-DD-slug.md` |
|
|
14
|
+
| `Decisions/` | What was decided and why | `YYYY-MM-DD-slug.md` |
|
|
15
|
+
| `Tasks/` | Concrete work items | `YYYY-MM-DD-slug.md` |
|
|
16
|
+
| `Knowledge/` | Reference material, notes, insights | `topic-slug.md` |
|
|
17
|
+
| `Journal/` | Daily notes, activity logs | `YYYY-MM-DD.md` |
|
|
18
|
+
| `Inbox/` | Anything unprocessed | any name |
|
|
19
|
+
| `Archive/` | Completed or retired items | mirrors source folders |
|
|
20
|
+
| `_lobsidian/` | System files (do not edit) | managed by protocol |
|
|
21
|
+
|
|
22
|
+
## The Motive-Decision-Task Chain
|
|
23
|
+
|
|
24
|
+
Check the example files to see a complete chain in action:
|
|
25
|
+
|
|
26
|
+
1. **Motive**: `Motives/2026-01-01-example-website-performance.md` -- why website speed matters
|
|
27
|
+
2. **Decision**: `Decisions/2026-01-01-example-cdn-caching.md` -- what to do about it
|
|
28
|
+
3. **Task**: `Tasks/2026-01-01-example-configure-cloudfront.md` -- the concrete work
|
|
29
|
+
|
|
30
|
+
These examples are disposable -- delete them whenever you like.
|
|
31
|
+
|
|
32
|
+
## Getting Started
|
|
33
|
+
|
|
34
|
+
### With an AI Agent
|
|
35
|
+
|
|
36
|
+
Your agent reads `_lobsidian/AGENT.md` on startup and knows how to operate. Just tell it about a problem or goal, and it will guide you through creating motives, decisions, and tasks.
|
|
37
|
+
|
|
38
|
+
Try: *"Our website is slow and we're losing visitors."*
|
|
39
|
+
|
|
40
|
+
The agent will ask clarifying questions, create a motive, propose a decision, and break it into tasks.
|
|
41
|
+
|
|
42
|
+
### Without an Agent
|
|
43
|
+
|
|
44
|
+
1. Create a file in `Motives/` describing a problem or opportunity (use the template in `_lobsidian/templates/motive.md`)
|
|
45
|
+
2. When you decide what to do, create a file in `Decisions/` linking to the motive
|
|
46
|
+
3. Break the decision into tasks in `Tasks/`
|
|
47
|
+
4. Review decisions when their `review_date` arrives
|
|
48
|
+
|
|
49
|
+
## Key Concepts
|
|
50
|
+
|
|
51
|
+
- **Frontmatter is the API** -- the YAML block at the top of each file is what matters. Folders are for human convenience.
|
|
52
|
+
- **Nothing is deleted** -- completed items move to `Archive/`. Wiki-links still resolve.
|
|
53
|
+
- **Decisions need consent** -- decisions go through `draft` -> `proposed` -> `active`. The `proposed` stage is a checkpoint for review.
|
|
54
|
+
- **Review dates close the loop** -- every decision has a `review_date`. When it arrives, revisit whether the decision is still working.
|
|
55
|
+
|
|
56
|
+
## Need Help?
|
|
57
|
+
|
|
58
|
+
- Run `lobsidian validate` to check your vault for issues
|
|
59
|
+
- Templates for each file type are in `_lobsidian/templates/`
|
|
60
|
+
- The full protocol spec is at [lobsidian.dev](https://lobsidian.dev)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
# Required
|
|
3
|
+
type: decision
|
|
4
|
+
title: ""
|
|
5
|
+
status: draft # draft | proposed | active | under-review | superseded | retired
|
|
6
|
+
motive: "[[motive-filename]]" # link to parent motive
|
|
7
|
+
version: 1
|
|
8
|
+
proposal: >
|
|
9
|
+
What we will do and how.
|
|
10
|
+
success_criteria:
|
|
11
|
+
- "Measurable criterion 1"
|
|
12
|
+
review_date: YYYY-MM-DD
|
|
13
|
+
created: YYYY-MM-DD
|
|
14
|
+
source: agent # agent | human
|
|
15
|
+
created_by: "" # agent-name | "human"
|
|
16
|
+
|
|
17
|
+
# Optional
|
|
18
|
+
responsible: null # agent-name
|
|
19
|
+
review_frequency: quarterly # weekly | biweekly | monthly | quarterly | biannually | annually
|
|
20
|
+
superseded_by: null # "[[new-decision]]" when superseded
|
|
21
|
+
concerns: []
|
|
22
|
+
objections_considered: []
|
|
23
|
+
confidence: null # high | medium | low
|
|
24
|
+
updated: null
|
|
25
|
+
tags: []
|
|
26
|
+
log: []
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
<!-- Body: rationale, alternatives considered, implementation notes -->
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: domain
|
|
3
|
+
name: ""
|
|
4
|
+
purpose: >
|
|
5
|
+
Why this domain exists.
|
|
6
|
+
motive: null # "[[primary-motive]]"
|
|
7
|
+
motives: [] # list of "[[motive]]" wiki-links
|
|
8
|
+
|
|
9
|
+
# Scope
|
|
10
|
+
includes:
|
|
11
|
+
- "Knowledge/"
|
|
12
|
+
- "Motives/"
|
|
13
|
+
- "Decisions/"
|
|
14
|
+
- "Tasks/"
|
|
15
|
+
excludes:
|
|
16
|
+
- "Journal/"
|
|
17
|
+
- "_lobsidian/"
|
|
18
|
+
- "*.env"
|
|
19
|
+
|
|
20
|
+
# Authority
|
|
21
|
+
filled_by: null # agent-name | human-name
|
|
22
|
+
autonomous_decisions:
|
|
23
|
+
- "Create and edit files within included paths"
|
|
24
|
+
- "Claim tasks whose deliverable location is within scope"
|
|
25
|
+
- "Create motive files for problems observed within scope"
|
|
26
|
+
requires_consent:
|
|
27
|
+
- "Delete any file"
|
|
28
|
+
- "Modify domain definitions"
|
|
29
|
+
- "Create decisions"
|
|
30
|
+
- "Move files outside domain scope"
|
|
31
|
+
|
|
32
|
+
# Constraints
|
|
33
|
+
wip_limit: 3
|
|
34
|
+
max_timebox_minutes: 120
|
|
35
|
+
|
|
36
|
+
# Monitoring
|
|
37
|
+
key_metrics: []
|
|
38
|
+
dependencies: []
|
|
39
|
+
|
|
40
|
+
# Review
|
|
41
|
+
review_date: YYYY-MM-DD
|
|
42
|
+
created: YYYY-MM-DD
|
|
43
|
+
updated: YYYY-MM-DD
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
<!-- Body: domain context, boundaries, notes -->
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: log
|
|
3
|
+
subtype: daily # daily | activity | meeting | reflection
|
|
4
|
+
date: YYYY-MM-DD
|
|
5
|
+
created_by: "" # agent-name | "human"
|
|
6
|
+
source: human # agent | human
|
|
7
|
+
motive: null # "[[motive-filename]]"
|
|
8
|
+
tags: []
|
|
9
|
+
confidence: null # high | medium | low
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
<!-- Body: log content -->
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
# Required
|
|
3
|
+
type: motive
|
|
4
|
+
title: ""
|
|
5
|
+
status: open # open | addressed | obsolete
|
|
6
|
+
situation: >
|
|
7
|
+
Objective description of what is currently happening.
|
|
8
|
+
need: >
|
|
9
|
+
What must change or be established to address this.
|
|
10
|
+
created: YYYY-MM-DD
|
|
11
|
+
source: agent # agent | human | bootstrap
|
|
12
|
+
created_by: "" # agent-name | "human"
|
|
13
|
+
|
|
14
|
+
# Optional
|
|
15
|
+
parent: null # "[[parent-motive]]" for sub-motives
|
|
16
|
+
bootstrapped: false # true only for bootstrap-created motives
|
|
17
|
+
effect: >
|
|
18
|
+
Why this situation matters.
|
|
19
|
+
confidence: null # high | medium | low (required if source: agent)
|
|
20
|
+
updated: null
|
|
21
|
+
tags: []
|
|
22
|
+
log: []
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
<!-- Body: additional context, evidence, related links -->
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: note
|
|
3
|
+
title: ""
|
|
4
|
+
source: human # agent | human | bootstrap
|
|
5
|
+
created_by: "" # agent-name | "human"
|
|
6
|
+
created: YYYY-MM-DD
|
|
7
|
+
topics: []
|
|
8
|
+
confidence: null # high | medium | low
|
|
9
|
+
updated: null
|
|
10
|
+
tags: []
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<!-- Body: knowledge content -->
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
# Required
|
|
3
|
+
type: task
|
|
4
|
+
title: ""
|
|
5
|
+
status: pending # pending | claimed | in-progress | blocked | done | cancelled
|
|
6
|
+
created: YYYY-MM-DD
|
|
7
|
+
source: agent # agent | human
|
|
8
|
+
created_by: "" # agent-name | "human"
|
|
9
|
+
|
|
10
|
+
# Optional -- linking
|
|
11
|
+
motive: null # "[[motive-filename]]"
|
|
12
|
+
decision: null # "[[decision-filename]]"
|
|
13
|
+
|
|
14
|
+
# Assignment (Pull System)
|
|
15
|
+
assignee: null # agent-name
|
|
16
|
+
priority: 5 # positive integer, lower = higher priority
|
|
17
|
+
claimed_at: null # ISO 8601 timestamp
|
|
18
|
+
|
|
19
|
+
# Deliverable specification
|
|
20
|
+
deliverable_format: null # e.g. "markdown file"
|
|
21
|
+
deliverable_location: null # e.g. "Knowledge/"
|
|
22
|
+
deliverable_criteria: []
|
|
23
|
+
|
|
24
|
+
# Timebox
|
|
25
|
+
timebox_minutes: null
|
|
26
|
+
due_date: null # YYYY-MM-DD
|
|
27
|
+
|
|
28
|
+
# Outcome (filled on completion)
|
|
29
|
+
outcome: null # required when status: done
|
|
30
|
+
completed_at: null # required when status: done, ISO 8601
|
|
31
|
+
|
|
32
|
+
# Metadata
|
|
33
|
+
confidence: null # high | medium | low
|
|
34
|
+
updated: null
|
|
35
|
+
tags: []
|
|
36
|
+
log: []
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
<!-- Body: implementation notes, progress updates -->
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "lobsidian",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Structured accountability for AI agents — markdown-based knowledge protocol",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"lobsidian": "./dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist/",
|
|
11
|
+
"embedded/"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"test": "vitest run",
|
|
16
|
+
"test:watch": "vitest",
|
|
17
|
+
"prepublishOnly": "npm run build"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"ai",
|
|
21
|
+
"agent",
|
|
22
|
+
"accountability",
|
|
23
|
+
"markdown",
|
|
24
|
+
"knowledge-management",
|
|
25
|
+
"obsidian"
|
|
26
|
+
],
|
|
27
|
+
"author": "can.nuri",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/cannuri/lobsidian.git"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://github.com/cannuri/lobsidian#readme",
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://github.com/cannuri/lobsidian/issues"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=18"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"commander": "^13.1.0",
|
|
42
|
+
"js-yaml": "^4.1.0"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/js-yaml": "^4.0.9",
|
|
46
|
+
"@types/node": "^22.0.0",
|
|
47
|
+
"typescript": "^5.7.0",
|
|
48
|
+
"vitest": "^3.0.0"
|
|
49
|
+
}
|
|
50
|
+
}
|