@archznn/crewloop-skills 0.1.0 → 0.3.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/README.md +43 -31
- package/assets/templates/skill-template.md +58 -0
- package/package.json +4 -1
- package/references/conventions.md +144 -0
- package/references/obsidian-mcp-usage.md +190 -0
- package/references/skill-anatomy.md +77 -0
- package/references/workflow.md +64 -0
- package/servers/obsidian-mcp/README.md +82 -0
- package/servers/obsidian-mcp/pyproject.toml +32 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/__init__.py +0 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/config.py +47 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/indexer/__init__.py +0 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/indexer/embeddings.py +105 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/indexer/indexer.py +79 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/indexer/store.py +141 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/indexer/sync.py +37 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/learning/__init__.py +0 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/learning/detector.py +66 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/learning/note_generator.py +40 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/main.py +4 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/models.py +42 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/privacy/__init__.py +0 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/privacy/filter.py +68 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/rag/__init__.py +0 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/rag/engine.py +50 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/rag/graph_search.py +55 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/rag/text_search.py +37 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/rag/vector_search.py +118 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/server.py +61 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/tools/__init__.py +0 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/tools/create.py +43 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/tools/delete.py +16 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/tools/learn.py +42 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/tools/list.py +16 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/tools/read.py +15 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/tools/registry.py +130 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/tools/related.py +20 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/tools/search.py +26 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/tools/sync.py +22 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/tools/update.py +34 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/vault/__init__.py +0 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/vault/parser.py +82 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/vault/repository.py +68 -0
- package/servers/obsidian-mcp/src/obsidian_mcp/vault/writer.py +61 -0
- package/servers/obsidian-mcp/tests/conftest.py +39 -0
- package/servers/obsidian-mcp/tests/test_async_tools.py +87 -0
- package/servers/obsidian-mcp/tests/test_edge_cases.py +59 -0
- package/servers/obsidian-mcp/tests/test_indexer.py +27 -0
- package/servers/obsidian-mcp/tests/test_integration.py +90 -0
- package/servers/obsidian-mcp/tests/test_learning.py +34 -0
- package/servers/obsidian-mcp/tests/test_privacy.py +31 -0
- package/servers/obsidian-mcp/tests/test_privacy_config.py +44 -0
- package/servers/obsidian-mcp/tests/test_rag.py +64 -0
- package/servers/obsidian-mcp/tests/test_read_raw.py +37 -0
- package/servers/obsidian-mcp/tests/test_tfidf_fallback.py +54 -0
- package/servers/obsidian-mcp/tests/test_tools.py +108 -0
- package/servers/obsidian-mcp/tests/test_vault.py +103 -0
- package/servers/obsidian-mcp/tests/test_writer.py +139 -0
- package/skills/accessibility-auditor/SKILL.md +262 -0
- package/skills/accessibility-auditor/references/a11y-checklist.md +66 -0
- package/skills/architect/SKILL.md +302 -302
- package/skills/architect/references/templates/design-template.md +58 -58
- package/skills/architect/references/templates/proposal-template.md +30 -30
- package/skills/architect/references/templates/spec-delta-template.md +23 -23
- package/skills/architect/references/templates/tasks-template.md +28 -28
- package/skills/designer/SKILL.md +245 -245
- package/skills/docs-writer/SKILL.md +192 -192
- package/skills/engineer/SKILL.md +302 -302
- package/skills/maintainer/SKILL.md +102 -102
- package/skills/obsidian-second-brain/SKILL.md +298 -263
- package/skills/orchestrator/SKILL.md +346 -346
- package/skills/product-manager/SKILL.md +98 -98
- package/skills/researcher/SKILL.md +99 -99
- package/skills/reviewer/SKILL.md +297 -297
- package/skills/security-guard/SKILL.md +142 -0
- package/skills/security-guard/references/security-checklist.md +57 -0
- package/skills/shipper/SKILL.md +433 -433
- package/skills/tester/SKILL.md +98 -98
package/README.md
CHANGED
|
@@ -4,14 +4,14 @@ An AI agent crew that runs the complete software development flow — from disco
|
|
|
4
4
|
|
|
5
5
|
[](https://leorsousa05.github.io/CrewLoop/)
|
|
6
6
|
[](LICENSE.md)
|
|
7
|
-
[](#whats-in-the-box)
|
|
8
8
|
[](scripts/validate-skills.py)
|
|
9
9
|
|
|
10
10
|
📚 **Read the full documentation at [leorsousa05.github.io/CrewLoop](https://leorsousa05.github.io/CrewLoop/)**
|
|
11
11
|
|
|
12
12
|
## Highlights
|
|
13
13
|
|
|
14
|
-
- **Process-driven workflow:** Orchestrator, Architect, Designer, Engineer, Reviewer, Shipper, Docs-Writer, Tester, Product-Manager, Maintainer, and
|
|
14
|
+
- **Process-driven workflow:** Orchestrator, Architect, Designer, Engineer, Reviewer, Shipper, Docs-Writer, Tester, Product-Manager, Maintainer, Researcher, Security-Guard, and Accessibility-Auditor each own one phase and never invade another's territory.
|
|
15
15
|
- **Mandatory specs:** Every change, from a one-line bug fix to a full feature, gets a lightweight spec in `specs/` before implementation starts.
|
|
16
16
|
- **Design before code:** When there is a UI, the Designer defines the aesthetic direction before the Engineer writes a single line of HTML or CSS.
|
|
17
17
|
- **Docs by docs-writer:** READMEs, module docs, feature docs, and changelogs are owned by the docs-writer skill — the engineer focuses on code and tests.
|
|
@@ -20,8 +20,6 @@ An AI agent crew that runs the complete software development flow — from disco
|
|
|
20
20
|
|
|
21
21
|
## Quick Start
|
|
22
22
|
|
|
23
|
-
### Option 1: Install from npm (recommended)
|
|
24
|
-
|
|
25
23
|
```bash
|
|
26
24
|
npm install -g @archznn/crewloop-cli
|
|
27
25
|
crewloop install
|
|
@@ -40,28 +38,7 @@ crewloop install --target /path/to/your/skills/dir
|
|
|
40
38
|
crewloop install --agent claude
|
|
41
39
|
```
|
|
42
40
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
1. Clone the repository:
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
git clone https://github.com/leorsousa05/CrewLoop.git
|
|
49
|
-
cd CrewLoop
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
2. Install all skills to your agent's skills directory:
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
./scripts/install.sh
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
By default this copies `skills/*` to `~/.agents/skills/`. Pass a custom target if needed:
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
./scripts/install.sh /path/to/your/skills/dir
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
3. Validate that all skills are well-formed:
|
|
41
|
+
Validate that all skills are well-formed:
|
|
65
42
|
|
|
66
43
|
```bash
|
|
67
44
|
python scripts/validate-skills.py
|
|
@@ -92,6 +69,8 @@ Each skill will be automatically detected and activated according to the convers
|
|
|
92
69
|
| [`product-manager`](skills/product-manager/SKILL.md) | 📊 | Product | [Docs](https://leorsousa05.github.io/CrewLoop/docs/supporting/product-manager) |
|
|
93
70
|
| [`maintainer`](skills/maintainer/SKILL.md) | 🛠️ | Upkeep | [Docs](https://leorsousa05.github.io/CrewLoop/docs/supporting/maintainer) |
|
|
94
71
|
| [`researcher`](skills/researcher/SKILL.md) | 🔬 | Research | [Docs](https://leorsousa05.github.io/CrewLoop/docs/supporting/researcher) |
|
|
72
|
+
| [`security-guard`](skills/security-guard/SKILL.md) | 🛡️ | Security Review | [Docs](https://leorsousa05.github.io/CrewLoop/docs/supporting/security-guard) |
|
|
73
|
+
| [`accessibility-auditor`](skills/accessibility-auditor/SKILL.md) | ♿ | Accessibility Review | [Docs](https://leorsousa05.github.io/CrewLoop/docs/supporting/accessibility-auditor) |
|
|
95
74
|
|
|
96
75
|
## Workflow
|
|
97
76
|
|
|
@@ -117,6 +96,12 @@ flowchart TD
|
|
|
117
96
|
S --> O
|
|
118
97
|
W --> O
|
|
119
98
|
OB["🧠 Obsidian Second Brain<br>Memory & RAG"] -.-> O
|
|
99
|
+
SG["🛡️ Security-Guard<br>Security Review"] -.-> R
|
|
100
|
+
AA["♿ Accessibility-Auditor<br>Accessibility Review"] -.-> R
|
|
101
|
+
R --> SG
|
|
102
|
+
R --> AA
|
|
103
|
+
SG --> E
|
|
104
|
+
AA --> E
|
|
120
105
|
|
|
121
106
|
style O fill:#01579b,color:#fff
|
|
122
107
|
style A fill:#e65100,color:#fff
|
|
@@ -130,6 +115,8 @@ flowchart TD
|
|
|
130
115
|
style RS fill:#006064,color:#fff
|
|
131
116
|
style MN fill:#37474f,color:#fff
|
|
132
117
|
style OB fill:#4a148c,color:#fff
|
|
118
|
+
style SG fill:#b71c1c,color:#fff
|
|
119
|
+
style AA fill:#6a1b9a,color:#fff
|
|
133
120
|
```
|
|
134
121
|
|
|
135
122
|
**Flow rules:**
|
|
@@ -143,8 +130,9 @@ flowchart TD
|
|
|
143
130
|
7. **Docs-Writer produces documentation** — READMEs, module docs, feature docs. Called by orchestrator when the task is purely documentation.
|
|
144
131
|
8. **Tester designs QA strategy** — reviews coverage, reproduces bugs, and complements engineer tests.
|
|
145
132
|
9. **Product-Manager, Researcher, and Maintainer are optional advisors** — framing, technology evaluation, and upkeep before or alongside the core flow.
|
|
146
|
-
10. **
|
|
147
|
-
11. **
|
|
133
|
+
10. **Security-Guard and Accessibility-Auditor are optional review specialists** — invoked by the Orchestrator or Reviewer when the change involves security-sensitive work or UI accessibility. They report findings back to the Engineer or Reviewer and do not touch git.
|
|
134
|
+
11. **Specs are archived** — `specs/changes/` becomes `specs/archive/` on commit.
|
|
135
|
+
12. **All skills return to orchestrator** — it is the central hub.
|
|
148
136
|
|
|
149
137
|
## Obsidian Second Brain (MCP)
|
|
150
138
|
|
|
@@ -187,13 +175,15 @@ CrewLoop/
|
|
|
187
175
|
│ ├── tester/
|
|
188
176
|
│ ├── product-manager/
|
|
189
177
|
│ ├── maintainer/
|
|
190
|
-
│
|
|
178
|
+
│ ├── researcher/
|
|
179
|
+
│ ├── security-guard/
|
|
180
|
+
│ └── accessibility-auditor/
|
|
191
181
|
├── servers/ # Optional MCP servers
|
|
192
182
|
│ └── obsidian-mcp/ # Local Obsidian second-brain server
|
|
193
183
|
├── scripts/ # Helper scripts
|
|
194
|
-
│ ├── install.sh
|
|
195
184
|
│ ├── validate-skills.py
|
|
196
|
-
│
|
|
185
|
+
│ ├── package-skill.py
|
|
186
|
+
│ └── npm-publish-dry-run.sh
|
|
197
187
|
├── references/ # Shared conventions and workflow docs
|
|
198
188
|
│ ├── conventions.md
|
|
199
189
|
│ ├── skill-anatomy.md
|
|
@@ -212,6 +202,28 @@ CrewLoop/
|
|
|
212
202
|
└── README.md
|
|
213
203
|
```
|
|
214
204
|
|
|
205
|
+
## Releasing
|
|
206
|
+
|
|
207
|
+
Packages are published automatically by GitHub Actions when a semantic-version tag is pushed.
|
|
208
|
+
|
|
209
|
+
1. Make sure `package.json` and `packages/cli/package.json` versions are updated and aligned.
|
|
210
|
+
2. Make sure `packages/cli/package.json` depends on `@archznn/crewloop-skills` with `^<version>`.
|
|
211
|
+
3. Create and push a tag:
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
git tag v0.2.0
|
|
215
|
+
git push origin v0.2.0
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
The workflow will:
|
|
219
|
+
|
|
220
|
+
- Validate that the tag matches both `package.json` versions and the CLI dependency.
|
|
221
|
+
- Publish `@archznn/crewloop-skills`.
|
|
222
|
+
- Wait until the new version is visible on npm.
|
|
223
|
+
- Publish `@archznn/crewloop-cli`.
|
|
224
|
+
|
|
225
|
+
You need an npm automation token with publish rights for the `@archznn` scope configured as the `NPM_TOKEN` repository secret.
|
|
226
|
+
|
|
215
227
|
## Contributing
|
|
216
228
|
|
|
217
229
|
Edit the files in `skills/` and `references/`. Keep each `SKILL.md` concise and use reference files for shared detail. Run `python scripts/validate-skills.py` before opening a PR.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-name
|
|
3
|
+
description: Describe what this skill does and when to use it. Be specific and include contexts where it should trigger even if the user does not explicitly name it. For example, mention related keywords, adjacent tasks, and competing skills where this one should win.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skill Name — One-Line Summary
|
|
7
|
+
|
|
8
|
+
## ROLE
|
|
9
|
+
|
|
10
|
+
Describe the role in 2-3 sentences. What is this skill responsible for? What does it NOT do?
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## MODE
|
|
15
|
+
|
|
16
|
+
**One-word mode.** What is the primary activity? (e.g., ANALYZE only, BUILD only, REVIEW only)
|
|
17
|
+
|
|
18
|
+
**NEVER do X** — Explain the most important restriction.
|
|
19
|
+
|
|
20
|
+
**NEVER do Y** — Explain another critical restriction.
|
|
21
|
+
|
|
22
|
+
**When done, present navigation options** — After completing work, show the letter-based navigation menu.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## WORKFLOW
|
|
27
|
+
|
|
28
|
+
### Step 1: Verify State
|
|
29
|
+
|
|
30
|
+
What should the skill check first? Include example commands if useful.
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Example command
|
|
34
|
+
git status --short
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Step 2: Do the Work
|
|
38
|
+
|
|
39
|
+
Describe the core process step by step.
|
|
40
|
+
|
|
41
|
+
### Step 3: Produce Output
|
|
42
|
+
|
|
43
|
+
What deliverables or summary should the skill produce?
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## RESPONSE RULES
|
|
48
|
+
|
|
49
|
+
- Rule one
|
|
50
|
+
- Rule two
|
|
51
|
+
- Rule three
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## ANTI-PATTERNS
|
|
56
|
+
|
|
57
|
+
- ❌ Something this skill should never do
|
|
58
|
+
- ❌ Another common mistake
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@archznn/crewloop-skills",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "CrewLoop AI agent skills bundle",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "leorsousa05",
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
"homepage": "https://leorsousa05.github.io/CrewLoop/",
|
|
12
12
|
"files": [
|
|
13
13
|
"skills/",
|
|
14
|
+
"references/",
|
|
15
|
+
"assets/",
|
|
16
|
+
"servers/obsidian-mcp/",
|
|
14
17
|
"README.md",
|
|
15
18
|
"LICENSE.md"
|
|
16
19
|
],
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Team Conventions
|
|
2
|
+
|
|
3
|
+
Shared conventions used by all Loop Engineering Agents skills.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Conventional Commits
|
|
8
|
+
|
|
9
|
+
All commits follow the [Conventional Commits](https://www.conventionalcommits.org/) standard.
|
|
10
|
+
|
|
11
|
+
### Allowed types
|
|
12
|
+
|
|
13
|
+
`feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `chore`, `revert`
|
|
14
|
+
|
|
15
|
+
### Description rules
|
|
16
|
+
|
|
17
|
+
- Maximum 72 characters
|
|
18
|
+
- Imperative mood: "add" not "added"
|
|
19
|
+
- No trailing period
|
|
20
|
+
- Lowercase after type/scope
|
|
21
|
+
|
|
22
|
+
### Branch names
|
|
23
|
+
|
|
24
|
+
Format: `<type>/<short-description>`
|
|
25
|
+
|
|
26
|
+
- Max 50 characters for the description part
|
|
27
|
+
- Kebab-case (hyphens, not underscores)
|
|
28
|
+
- No uppercase letters
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Letter-Based Navigation
|
|
33
|
+
|
|
34
|
+
At the end of each skill, present navigation options by letter:
|
|
35
|
+
|
|
36
|
+
```markdown
|
|
37
|
+
**What would you like to do?**
|
|
38
|
+
|
|
39
|
+
- **[A] Architect** — Create or update specs
|
|
40
|
+
- **[D] Designer** — Visual/UI design direction
|
|
41
|
+
- **[E] Engineer** — Implement (BUILD mode)
|
|
42
|
+
- **[R] Reviewer** — Code review and quality gate
|
|
43
|
+
- **[S] Shipper** — Commit, branch, push, PR
|
|
44
|
+
- **[O] Orchestrator** — New task or adjust scope
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Use only the letters relevant to the current context.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Spec Folder Structure
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
specs/
|
|
55
|
+
├── changes/ # Active deltas
|
|
56
|
+
│ └── 001-change-name/
|
|
57
|
+
│ ├── .spec.yaml # status, dates, author
|
|
58
|
+
│ ├── proposal.md # WHY
|
|
59
|
+
│ ├── specs/ # WHAT
|
|
60
|
+
│ ├── design.md # HOW
|
|
61
|
+
│ └── tasks.md # ordered checklist
|
|
62
|
+
├── archive/ # Completed changes (YYYY-MM-DD-NNN-name)
|
|
63
|
+
├── living/ # Merged source of truth
|
|
64
|
+
├── decisions/ # ADRs
|
|
65
|
+
└── templates/ # Reusable templates
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Rules:
|
|
69
|
+
|
|
70
|
+
- Every spec lives inside `specs/changes/NNN-name/`. Never directly in `specs/`.
|
|
71
|
+
- `living/` reflects the current state of the system.
|
|
72
|
+
- `archive/` preserves completed changes for audit.
|
|
73
|
+
- `decisions/` records irreversible architectural choices.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Memory Conventions
|
|
78
|
+
|
|
79
|
+
- Every skill invokes `obsidian-second-brain` via the `Skill` tool at task start and end.
|
|
80
|
+
- Never read or write files inside `~/.lea` directly with `Read`, `Edit`, `Write`, or `Bash`.
|
|
81
|
+
- Target the correct vault layer: `Knowledge/` for durable guides, `Journal/` for session outcomes, `Memory/` for user profile, `Notes/` for scratchpads, `_Inbox/` for proposals.
|
|
82
|
+
- Full reference: `references/obsidian-mcp-usage.md`.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Mandatory Workflow
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
Orchestrator → Architect → (Designer, if UI) → Engineer → Reviewer → Shipper → Orchestrator
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Critical rules:
|
|
93
|
+
|
|
94
|
+
- The orchestrator **always** sends to the architect first.
|
|
95
|
+
- The architect creates specs for **any** change.
|
|
96
|
+
- Designer acts **before** engineer when there is UI.
|
|
97
|
+
- Engineer **never** executes git operations or reviews their own code.
|
|
98
|
+
- Reviewer **never** writes code or runs git operations.
|
|
99
|
+
- Shipper is the only one responsible for commit, branch, push, and PR.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## AFK Mode
|
|
104
|
+
|
|
105
|
+
When the user explicitly activates AFK mode, skills route automatically through the workflow without presenting navigation menus.
|
|
106
|
+
|
|
107
|
+
### Activation phrases
|
|
108
|
+
|
|
109
|
+
Case-insensitive matches: `AFK`, `estarei AFK`, `modo AFK`, `vou ficar AFK`.
|
|
110
|
+
|
|
111
|
+
When activated, set `afk: true` in `MEMORY.md` so subsequent skills know the mode is active. AFK mode resets when the workflow returns to Orchestrator after shipping, or when the user explicitly disables it.
|
|
112
|
+
|
|
113
|
+
### Role prefixes
|
|
114
|
+
|
|
115
|
+
Every skill response must start with its prefix on its own line:
|
|
116
|
+
|
|
117
|
+
| Skill | Prefix |
|
|
118
|
+
|-------|--------|
|
|
119
|
+
| Orchestrator | `[ORCHESTRATOR TALKING]` |
|
|
120
|
+
| Architect | `[ARCHITECT ANALYZING]` |
|
|
121
|
+
| Designer | `[DESIGNER DESIGNING]` |
|
|
122
|
+
| Engineer | `[ENGINEER BUILDING]` |
|
|
123
|
+
| Reviewer | `[REVIEWER REVIEWING]` |
|
|
124
|
+
| Shipper | `[SHIPPER SHIPPING]` |
|
|
125
|
+
|
|
126
|
+
### Automatic routing
|
|
127
|
+
|
|
128
|
+
When AFK mode is active, each skill proceeds to the next role in the standard workflow without waiting for user confirmation:
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
Orchestrator → Architect → (Designer, if UI) → Engineer → Reviewer → Shipper → Orchestrator
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Patterns We Follow
|
|
137
|
+
|
|
138
|
+
| Pattern | How We Apply It |
|
|
139
|
+
|---------|---------------|
|
|
140
|
+
| **SDD (Spec-Driven Development)** | Specs in `specs/` are the source of truth. |
|
|
141
|
+
| **DDD (Domain-Driven Design)** | Organization by bounded contexts. |
|
|
142
|
+
| **CDD (Contract-Driven Development)** | Contracts, interfaces, and explicit types. |
|
|
143
|
+
| **TDD (Test-Driven Development)** | Tests before or alongside implementation. |
|
|
144
|
+
| **Context Engineering** | Semantic names; understand function by reading ≤2 adjacent files. |
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# Obsidian MCP Second Brain — Usage for Agents
|
|
2
|
+
|
|
3
|
+
This document explains how the Loop Engineering Agents team should use the local Obsidian MCP server (`servers/obsidian-mcp`).
|
|
4
|
+
|
|
5
|
+
## What It Is
|
|
6
|
+
|
|
7
|
+
A local MCP server exposes a vault at `~/.lea` as a second brain. The AI can:
|
|
8
|
+
|
|
9
|
+
- Search existing knowledge (bundle + vault notes).
|
|
10
|
+
- Read notes.
|
|
11
|
+
- Create and update notes.
|
|
12
|
+
- Learn from conversation text automatically via `learn_from_text`.
|
|
13
|
+
|
|
14
|
+
## Vault Architecture
|
|
15
|
+
|
|
16
|
+
The vault follows a **three-layer memory architecture**. Every skill in the bundle that reads from or writes to `~/.lea` must use these layers.
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
~/.lea/
|
|
20
|
+
├── AGENT.md # Entry point: read this first
|
|
21
|
+
├── MEMORY.md # Curated memory: read at session start
|
|
22
|
+
├── memory/ # Working memory: raw session logs
|
|
23
|
+
├── Memory/ # Durable user profile and preferences
|
|
24
|
+
├── Knowledge/ # Long-lived technical guides and decisions
|
|
25
|
+
├── Journal/ # Session logs and dashboards worth keeping
|
|
26
|
+
├── Notes/ # Temporary notes, drafts, and research
|
|
27
|
+
└── _Inbox/ # Agent proposals before promotion
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Layer Semantics
|
|
31
|
+
|
|
32
|
+
| Layer | Path | When to Use |
|
|
33
|
+
|-------|------|-------------|
|
|
34
|
+
| Agent entry | `AGENT.md` | Read once per session before using the vault. |
|
|
35
|
+
| Curated memory | `MEMORY.md` | Read at the start of every major task. Soft cap ~500 words. |
|
|
36
|
+
| Working memory | `memory/` | Append raw, timestamped session logs. Pattern: `YYYY-MM-DD-HHMM.md`. |
|
|
37
|
+
| User profile | `Memory/` | Durable facts about the user: role, preferences, goals. |
|
|
38
|
+
| Knowledge | `Knowledge/` | Durable technical guides, architectural decisions, reusable docs. |
|
|
39
|
+
| Journal | `Journal/` | Important session outcomes, project briefs, dashboards. |
|
|
40
|
+
| Notes | `Notes/` | Temporary scratchpads, drafts, research not yet canonical. |
|
|
41
|
+
| Inbox | `_Inbox/` | Proposed new canonical notes. Auto-promotion is allowed. |
|
|
42
|
+
|
|
43
|
+
### Session Start
|
|
44
|
+
|
|
45
|
+
1. Call `sync_from_bundle` once per session.
|
|
46
|
+
2. Read `AGENT.md`.
|
|
47
|
+
3. Read `MEMORY.md`.
|
|
48
|
+
4. Search targeted layers based on the user's question.
|
|
49
|
+
|
|
50
|
+
### Layer Selection Rules
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
User asks a question
|
|
54
|
+
↓
|
|
55
|
+
Read AGENT.md and MEMORY.md
|
|
56
|
+
↓
|
|
57
|
+
Durable concept or guide? → search Knowledge/
|
|
58
|
+
User preference or identity? → search Memory/
|
|
59
|
+
Recent session or decision? → search Journal/
|
|
60
|
+
Raw log of current conversation? → append to memory/
|
|
61
|
+
Proposing new canonical knowledge? → create in _Inbox/
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Heartbeat / Distillation
|
|
65
|
+
|
|
66
|
+
Every 2-4 sessions (or at the end of a significant task), the agent should:
|
|
67
|
+
|
|
68
|
+
1. Read recent files in `memory/`.
|
|
69
|
+
2. Update `MEMORY.md` with distilled, short-term-relevant facts.
|
|
70
|
+
3. Promote durable facts from `_Inbox/` to `Memory/`, `Knowledge/`, `Journal/`, or `Notes/`.
|
|
71
|
+
4. Archive or delete obsolete raw logs.
|
|
72
|
+
|
|
73
|
+
Keep `MEMORY.md` under ~500 words. If it grows, move long-lived facts to `Knowledge/` or `Memory/` and keep only active context in `MEMORY.md`.
|
|
74
|
+
|
|
75
|
+
## Frontmatter Rules
|
|
76
|
+
|
|
77
|
+
The MCP server manages note frontmatter automatically. Callers should **not** include YAML frontmatter delimiters (`---`) inside `content`.
|
|
78
|
+
|
|
79
|
+
### Server-managed fields
|
|
80
|
+
|
|
81
|
+
| Field | Source | Behavior |
|
|
82
|
+
|-------|--------|----------|
|
|
83
|
+
| `title` | `title` parameter or derived from path | Always present; server value wins over any embedded value. |
|
|
84
|
+
| `tags` | `tags` parameter plus any embedded tags | Union of caller tags and embedded tags, sorted, deduplicated. |
|
|
85
|
+
| `created` | First save timestamp | Preserved across updates. |
|
|
86
|
+
| `updated` | Current save timestamp | Refreshed on every save. |
|
|
87
|
+
|
|
88
|
+
### Caller responsibilities
|
|
89
|
+
|
|
90
|
+
- Pass `title` and `tags` as top-level parameters of `create_note` / `update_note`.
|
|
91
|
+
- Keep `content` as the Markdown body only.
|
|
92
|
+
- If `content` accidentally contains a frontmatter block, the server extracts it, merges the fields, and writes a single valid block.
|
|
93
|
+
|
|
94
|
+
## Available MCP Tools
|
|
95
|
+
|
|
96
|
+
| Tool | Purpose |
|
|
97
|
+
|------|---------|
|
|
98
|
+
| `search_notes` | Find relevant notes. Prefer `mode: "hybrid"`. |
|
|
99
|
+
| `read_note` | Read a specific note by path. |
|
|
100
|
+
| `create_note` | Create a new note in the correct layer. |
|
|
101
|
+
| `update_note` | Append or replace content. Use `append` to preserve history. |
|
|
102
|
+
| `delete_note` | Remove a note. Use sparingly. |
|
|
103
|
+
| `list_notes` | List notes, optionally filtered by folder. |
|
|
104
|
+
| `get_related_notes` | Explore graph relationships from a note. |
|
|
105
|
+
| `sync_from_bundle` | Re-index the skill bundle and local vault. |
|
|
106
|
+
| `learn_from_text` | Detect concepts/decisions in text and auto-create notes. |
|
|
107
|
+
|
|
108
|
+
## Note Paths
|
|
109
|
+
|
|
110
|
+
Use English folder names and English note content:
|
|
111
|
+
|
|
112
|
+
- `Memory/profile-user.md`
|
|
113
|
+
- `Knowledge/obsidian-mcp-setup.md`
|
|
114
|
+
- `Journal/2026-06-15-project-brief.md`
|
|
115
|
+
- `Notes/2026-06-15-ml-concepts.md`
|
|
116
|
+
- `_Inbox/proposed-knowledge-2026-06-15.md`
|
|
117
|
+
|
|
118
|
+
## Privacy Rules
|
|
119
|
+
|
|
120
|
+
Never persist in the vault:
|
|
121
|
+
|
|
122
|
+
- API keys, secrets, tokens, passwords
|
|
123
|
+
- Private keys or certificates
|
|
124
|
+
- `.env` contents
|
|
125
|
+
- Personal identifiable information (PII)
|
|
126
|
+
|
|
127
|
+
The server has a privacy filter, but avoid sensitive input regardless. Review working memory before promoting anything to curated or structured layers.
|
|
128
|
+
|
|
129
|
+
## Configuration Reminder
|
|
130
|
+
|
|
131
|
+
The server must be installed and added to the agent's MCP config:
|
|
132
|
+
|
|
133
|
+
```toml
|
|
134
|
+
[mcpServers.obsidian-mcp]
|
|
135
|
+
command = "/path/to/servers/obsidian-mcp/.venv/bin/python"
|
|
136
|
+
args = ["-m", "obsidian_mcp.main"]
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
See `servers/obsidian-mcp/README.md` for full setup instructions.
|
|
140
|
+
|
|
141
|
+
## Migration from Flat Folders
|
|
142
|
+
|
|
143
|
+
Old flat folders (`concepts/`, `decisions/`, `projects/`, `dashboards/`) should be migrated to the new layers:
|
|
144
|
+
|
|
145
|
+
- `concepts/` → `Knowledge/` (durable) or `Notes/` (transient)
|
|
146
|
+
- `decisions/` → `Knowledge/`
|
|
147
|
+
- `projects/` → `Journal/` (active) or `Knowledge/` (reference)
|
|
148
|
+
- `dashboards/` → `Journal/`
|
|
149
|
+
|
|
150
|
+
## Skill Memory & Context Pattern
|
|
151
|
+
|
|
152
|
+
Every skill in the bundle must access the local Obsidian vault at `~/.lea` **only** through the `obsidian-second-brain` skill. Never read or write vault files directly with `Read`, `Edit`, `Write`, or `Bash`.
|
|
153
|
+
|
|
154
|
+
### Before acting
|
|
155
|
+
|
|
156
|
+
Invoke the `obsidian-second-brain` skill via the `Skill` tool. It will:
|
|
157
|
+
|
|
158
|
+
1. Read `AGENT.md` once per session if not already loaded.
|
|
159
|
+
2. Read `MEMORY.md` at the start of the task.
|
|
160
|
+
3. Search the layers relevant to this skill's role (see table below).
|
|
161
|
+
|
|
162
|
+
If the vault or MCP server is unavailable, continue without memory.
|
|
163
|
+
|
|
164
|
+
### After acting
|
|
165
|
+
|
|
166
|
+
Invoke the `obsidian-second-brain` skill again to persist outcomes to the correct layer:
|
|
167
|
+
|
|
168
|
+
- Reusable guides, conventions, or architecture notes → `Knowledge/`
|
|
169
|
+
- Session outcomes, decisions, or findings → `Journal/`
|
|
170
|
+
- User profile facts or preferences → `Memory/`
|
|
171
|
+
- Proposed canonical notes awaiting review → `_Inbox/`
|
|
172
|
+
- Active context and priorities → update `MEMORY.md`
|
|
173
|
+
|
|
174
|
+
## Per-Skill Memory Targets
|
|
175
|
+
|
|
176
|
+
Each skill in the bundle should read from and write to the layers relevant to its role. See `skills/obsidian-second-brain/SKILL.md` for tool usage details.
|
|
177
|
+
|
|
178
|
+
| Skill | Read at start | Persist at end |
|
|
179
|
+
|-------|---------------|----------------|
|
|
180
|
+
| `orchestrator` | `MEMORY.md`, `Memory/preferences.md` | User priorities/context to `MEMORY.md`; unclear items to `_Inbox/` |
|
|
181
|
+
| `architect` | `Knowledge/`, `Memory/`, `Journal/decisions*` | Specs rationale to `Knowledge/`; ADRs to `Knowledge/` |
|
|
182
|
+
| `designer` | `Memory/preferences.md`, `Journal/design*`, `Knowledge/brand*` | Design direction to `Journal/`; reusable systems to `Knowledge/` |
|
|
183
|
+
| `engineer` | `Knowledge/`, `Journal/`, `Memory/` | Implementation notes to `Journal/`; reusable patterns to `Knowledge/` |
|
|
184
|
+
| `reviewer` | `Knowledge/conventions*`, `Journal/decisions*`, `Memory/` | Review findings to `Journal/`; process updates to `Knowledge/` |
|
|
185
|
+
| `shipper` | `Knowledge/conventions*`, `Memory/preferences.md` | Shipping log to `Journal/` |
|
|
186
|
+
| `docs-writer` | `Knowledge/`, `Memory/preferences.md`, `Journal/` | New/updated docs to `Knowledge/` |
|
|
187
|
+
| `researcher` | `Knowledge/`, `Journal/` | Research summaries to `Knowledge/` or `_Inbox/` |
|
|
188
|
+
| `maintainer` | `Knowledge/`, `Journal/incidents*` | Incident/debt notes to `Journal/`; runbooks to `Knowledge/` |
|
|
189
|
+
| `product-manager` | `Memory/preferences.md`, `Journal/`, `Knowledge/` | Decisions/metrics to `Knowledge/` or `Journal/` |
|
|
190
|
+
| `tester` | `Knowledge/`, `Journal/bugs*` | Test strategies/heuristics to `Knowledge/` |
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Skill Anatomy
|
|
2
|
+
|
|
3
|
+
Guide for writing new skills in the Loop Engineering Agents project.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## File Structure
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
skills/<skill-name>/
|
|
11
|
+
├── SKILL.md # Required. Instructions and frontmatter.
|
|
12
|
+
└── references/ # Optional. Docs loaded into context as needed.
|
|
13
|
+
└── templates/ # Optional. Reusable templates.
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
For skills that need executable helpers, prefer scripts in the top-level `scripts/` folder rather than bundling them inside the skill.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## SKILL.md Frontmatter
|
|
21
|
+
|
|
22
|
+
Every `SKILL.md` must start with YAML frontmatter:
|
|
23
|
+
|
|
24
|
+
```yaml
|
|
25
|
+
---
|
|
26
|
+
name: skill-name
|
|
27
|
+
description: When to trigger and what the skill does. Be specific and slightly pushy — include contexts where the skill should be used even if the user does not explicitly name it.
|
|
28
|
+
---
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### name
|
|
32
|
+
|
|
33
|
+
- Must match the directory name
|
|
34
|
+
- Lowercase, kebab-case
|
|
35
|
+
|
|
36
|
+
### description
|
|
37
|
+
|
|
38
|
+
- Primary triggering mechanism
|
|
39
|
+
- Include what the skill does AND when to use it
|
|
40
|
+
- Mention related keywords and adjacent contexts
|
|
41
|
+
- 50-200 words is a good range
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## SKILL.md Body
|
|
46
|
+
|
|
47
|
+
Keep the body under 500 lines when possible. Use progressive disclosure:
|
|
48
|
+
|
|
49
|
+
1. **ROLE** — What the skill is responsible for
|
|
50
|
+
2. **MODE** — What it must and must never do
|
|
51
|
+
3. **WORKFLOW** — Step-by-step process
|
|
52
|
+
4. **RESPONSE RULES** — How to behave and respond
|
|
53
|
+
5. **ANTI-PATTERNS** — Common mistakes to avoid
|
|
54
|
+
|
|
55
|
+
### Tone
|
|
56
|
+
|
|
57
|
+
- Use imperative form for instructions
|
|
58
|
+
- Explain why things matter instead of heavy-handed MUSTs
|
|
59
|
+
- Be specific in examples
|
|
60
|
+
- Preserve letter-based navigation at the end
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Validation
|
|
65
|
+
|
|
66
|
+
Run the validator after creating or editing a skill:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
python scripts/validate-skills.py
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
This checks:
|
|
73
|
+
- `SKILL.md` exists
|
|
74
|
+
- Frontmatter is parseable
|
|
75
|
+
- Required fields (`name`, `description`) are present
|
|
76
|
+
- `name` matches the directory name
|
|
77
|
+
- Description is not too short
|