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.
Files changed (61) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +186 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +15 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/init.d.ts +2 -0
  7. package/dist/commands/init.js +24 -0
  8. package/dist/commands/init.js.map +1 -0
  9. package/dist/commands/validate.d.ts +2 -0
  10. package/dist/commands/validate.js +35 -0
  11. package/dist/commands/validate.js.map +1 -0
  12. package/dist/lib/content.d.ts +11 -0
  13. package/dist/lib/content.js +80 -0
  14. package/dist/lib/content.js.map +1 -0
  15. package/dist/lib/frontmatter.d.ts +29 -0
  16. package/dist/lib/frontmatter.js +372 -0
  17. package/dist/lib/frontmatter.js.map +1 -0
  18. package/dist/lib/scaffold.d.ts +7 -0
  19. package/dist/lib/scaffold.js +105 -0
  20. package/dist/lib/scaffold.js.map +1 -0
  21. package/dist/lib/slug.d.ts +13 -0
  22. package/dist/lib/slug.js +96 -0
  23. package/dist/lib/slug.js.map +1 -0
  24. package/dist/lib/validate/checks.d.ts +23 -0
  25. package/dist/lib/validate/checks.js +777 -0
  26. package/dist/lib/validate/checks.js.map +1 -0
  27. package/dist/lib/validate/fix.d.ts +7 -0
  28. package/dist/lib/validate/fix.js +75 -0
  29. package/dist/lib/validate/fix.js.map +1 -0
  30. package/dist/lib/validate/index.d.ts +37 -0
  31. package/dist/lib/validate/index.js +88 -0
  32. package/dist/lib/validate/index.js.map +1 -0
  33. package/dist/lib/validate/report.d.ts +3 -0
  34. package/dist/lib/validate/report.js +77 -0
  35. package/dist/lib/validate/report.js.map +1 -0
  36. package/dist/lib/vault.d.ts +28 -0
  37. package/dist/lib/vault.js +119 -0
  38. package/dist/lib/vault.js.map +1 -0
  39. package/dist/lib/wikilink.d.ts +45 -0
  40. package/dist/lib/wikilink.js +156 -0
  41. package/dist/lib/wikilink.js.map +1 -0
  42. package/embedded/agent.md +91 -0
  43. package/embedded/config.md.tmpl +48 -0
  44. package/embedded/dashboard.md +35 -0
  45. package/embedded/domains/default.md.tmpl +44 -0
  46. package/embedded/examples/example-cdn-caching.md +53 -0
  47. package/embedded/examples/example-configure-cloudfront.md +56 -0
  48. package/embedded/examples/example-website-performance.md +36 -0
  49. package/embedded/gitignore +4 -0
  50. package/embedded/procedures/cascade.md +33 -0
  51. package/embedded/procedures/context-extraction.md +43 -0
  52. package/embedded/procedures/facilitation.md +43 -0
  53. package/embedded/procedures/review-cycle.md +47 -0
  54. package/embedded/start-here.md +60 -0
  55. package/embedded/templates/decision.md +29 -0
  56. package/embedded/templates/domain.md +46 -0
  57. package/embedded/templates/log.md +12 -0
  58. package/embedded/templates/motive.md +25 -0
  59. package/embedded/templates/note.md +13 -0
  60. package/embedded/templates/task.md +39 -0
  61. 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
+ }