280 lines
12 KiB
Markdown
280 lines
12 KiB
Markdown
# TOOLS.md - Local Notes
|
|
|
|
|
|
## AtoCore (External Context Service)
|
|
|
|
- **Canonical Host:** http://dalidou:8100
|
|
- **Role:** Read-only external context service for trusted project state, retrieval, context-building, registered project refresh, project registration discovery, and retrieval-quality auditing
|
|
- **Machine state lives on:** Dalidou (/srv/storage/atocore/data/...)
|
|
- **Rule:** Use AtoCore as additive context only; do not treat it as a replacement for OpenClaw memory
|
|
- **Helper script:** /home/papa/clawd/skills/atocore-context/scripts/atocore.sh
|
|
- **Python fallback:** `/home/papa/clawd/skills/atocore-context/scripts/atocore.py` for non-Bash environments
|
|
- **Key commands:** `projects`, `project-template`, `detect-project "<prompt>"`, `auto-context "<prompt>" [budget] [project]`, `debug-context`, `audit-query "<prompt>" [top_k] [project]`, `propose-project ...`, `register-project ...`, `update-project <id> "description" ["aliases"]`, `refresh-project <id>`, `project-state <id> [category]`, `project-state-set <project> <category> <key> <value> [source] [confidence]`, `project-state-invalidate <project> <category> <key>`, `context-build ...`
|
|
- **Fail-open rule:** If AtoCore is unavailable, continue normal OpenClaw behavior
|
|
|
|
### Organic Usage Rule
|
|
|
|
- For normal project knowledge questions, try `auto-context` first.
|
|
- For retrieval complaints or broad-prompt drift, run `audit-query` before changing ingestion scope.
|
|
- Use `project-state` when you want trusted current truth only.
|
|
- Use `project-state-set` for current status, current decisions, baseline requirements, milestone views, and next actions.
|
|
- Use `query` for quick probing/debugging.
|
|
- Use `context-build` when you already know the project and want the exact context pack.
|
|
- Use `debug-context` right after `auto-context` or `context-build` if you want
|
|
to inspect the exact AtoCore supplement being fed into the workflow.
|
|
- Do Wave 2 trusted-operational ingestion before broad PKM expansion.
|
|
- Treat AtoDrive as a curated operational-truth source, not a generic bulk ingest target.
|
|
- Keep purely local coding tasks local unless broader project context is likely to help.
|
|
|
|
## PKM / Obsidian Vault
|
|
|
|
- **Local Path:** `/home/papa/obsidian-vault/`
|
|
- **Name:** Antoine Brain Extension
|
|
- **Sync:** Syncthing (syncs from dalidou)
|
|
- **Access:** ✅ Direct local access — no SSH needed!
|
|
|
|
## ATODrive (Work Documents)
|
|
|
|
- **Local Path:** `/home/papa/ATODrive/`
|
|
- **Sync:** Syncthing (syncs from dalidou SeaDrive)
|
|
- **Access:** ✅ Direct local access
|
|
|
|
## Atomaste (Business/Templates)
|
|
|
|
- **Local Path:** `/home/papa/Atomaste/`
|
|
- **Sync:** Syncthing (syncs from dalidou SeaDrive)
|
|
- **Access:** ✅ Direct local access
|
|
|
|
## Atomaste Finance (Canonical Expense System)
|
|
|
|
- **Single home:** `/home/papa/Atomaste/03_Finances/Expenses/`
|
|
- **Rule:** If it is expense-related, it belongs under `Expenses/`, not `Documents/Receipts/`
|
|
- **Per-year structure:**
|
|
- `YYYY/Inbox/` — unprocessed incoming receipts/screenshots
|
|
- `YYYY/receipts/` — final home for processed raw receipt files
|
|
- `YYYY/expenses_master.csv` — main structured expense table
|
|
- `YYYY/reports/` — derived summaries, exports, tax packages
|
|
- **Workflow:** Inbox → `expenses_master.csv` → `receipts/`
|
|
- **Legacy path:** `/home/papa/Atomaste/03_Finances/Documents/Receipts/` is deprecated and should stay unused except for the migration note
|
|
|
|
## Odile Inc (Corporate)
|
|
|
|
- **Local Path:** `/home/papa/Odile Inc/`
|
|
- **Sync:** Syncthing (syncs from dalidou SeaDrive `My Libraries\Odile\Odile Inc`)
|
|
- **Access:** ✅ Direct local access
|
|
- **Entity:** Odile Bérubé O.D. Inc. (SPCC, optometrist)
|
|
- **Fiscal year end:** July 31
|
|
- **Structure:** `01_Finances/` (BankStatements, Expenses, Payroll, Revenue, Taxes), `02_Admin/`, `Inbox/`
|
|
- **Rule:** Corporate docs go here, personal docs go to `Impôts Odile/Dossier_Fiscal_YYYY/`
|
|
|
|
## Impôts Odile (Personal Tax)
|
|
|
|
- **Local Path:** `/home/papa/Impôts Odile/`
|
|
- **Sync:** Syncthing (syncs from dalidou SeaDrive)
|
|
- **Access:** ✅ Direct local access
|
|
- **Structure:** `Dossier_Fiscal_YYYY/` (9 sections: revenus, dépenses, crédits, feuillets, REER, dons, comptable, frais médicaux, budget)
|
|
- **Cron:** Monthly receipt processing (1st of month, 2 PM ET) scans mario@atomaste.ca for Odile's emails
|
|
|
|
## Git Repos (via Gitea)
|
|
|
|
- **Gitea URL:** http://100.80.199.40:3000
|
|
- **Auth:** Token in `~/.gitconfig` — **ALWAYS use auth for API calls** (private repos won't show without it)
|
|
- **API Auth Header:** `Authorization: token $(git config --get credential.http://100.80.199.40:3000.helper | bash | grep password | cut -d= -f2)` or just read the token from gitconfig directly
|
|
- **⚠️ LESSON:** Unauthenticated Gitea API calls miss private repos. Always authenticate.
|
|
- **Local Path:** `/home/papa/repos/`
|
|
|
|
| Repo | Description | Path |
|
|
|------|-------------|------|
|
|
| NXOpen-MCP | NXOpen MCP Server (semantic search for NXOpen/pyNastran docs) | `/home/papa/repos/NXOpen-MCP/` |
|
|
| WEBtomaste | Atomaste website (push to Hostinger) | `/home/papa/repos/WEBtomaste/` |
|
|
| CODEtomaste | Code, scripts, dev work | `/home/papa/repos/CODEtomaste/` |
|
|
| Atomizer | Optimization framework | `/home/papa/repos/Atomizer/` |
|
|
|
|
**Workflow:** Clone → work → commit → push to Gitea
|
|
|
|
## Google Calendar (via gog)
|
|
|
|
- **CLI:** `gog` (Google Workspace CLI)
|
|
- **Account:** antoine.letarte@gmail.com
|
|
- **Scopes:** Calendar only (no Gmail, Drive, etc.)
|
|
- **Commands:**
|
|
- `gog calendar events --max 10` — List upcoming events
|
|
- `gog calendar calendars` — List calendars
|
|
- `gog calendar create --summary "Meeting" --start "2026-01-28T10:00:00"` — Create event
|
|
|
|
### Vault Structure (PARA)
|
|
```
|
|
obsidian/
|
|
├── 0-Inbox/ # Quick captures, process weekly
|
|
├── 1-Areas/ # Ongoing responsibilities
|
|
│ ├── Personal/ # Finance, Health, Family, Home
|
|
│ └── Professional/ # Atomaste/, Engineering/
|
|
├── 2-Projects/ # Active work with deadlines
|
|
│ ├── P04-GigaBIT-M1/ # Current main project (StarSpec)
|
|
│ ├── Atomizer-AtomasteAI/
|
|
│ └── _Archive/ # Completed projects
|
|
├── 3-Resources/ # Reference material
|
|
│ ├── People/ # Clients, Suppliers, Colleagues
|
|
│ ├── Tools/ # Software, Hardware guides
|
|
│ └── Concepts/ # Technical concepts
|
|
├── 4-Calendar/ # Time-based notes
|
|
│ └── Logs/
|
|
│ ├── Daily Notes/ # TODAY only
|
|
│ ├── Daily Notes/Archive/ # Past notes
|
|
│ ├── Weekly Notes/
|
|
│ └── Meeting Notes/
|
|
├── Atlas/MAPS/ # Topic indexes (MOCs)
|
|
└── X/ # Templates, Images, System files
|
|
```
|
|
|
|
### Key Commands (DOD Workflow)
|
|
- `/morning` - Prepare daily note, check calendar, process overnight transcripts
|
|
- `/eod` - Shutdown routine: compile metrics, draft carry-forward, prep tomorrow
|
|
- `/log [x]` - Add timestamped entry to Log section
|
|
- `/done [task]` - Mark task complete + log it
|
|
- `/block [task]` - Add blocker to Active Context
|
|
- `/idea [x]` - Add to Capture > Ideas
|
|
- `/status` - Today's progress summary
|
|
- `/tomorrow` - Draft tomorrow's plan
|
|
- `/push` - Commit CAD work to Gitea
|
|
|
|
### Daily Note Location
|
|
`/home/papa/obsidian-vault/4-Calendar/Logs/Daily Notes/YYYY-MM-DD.md`
|
|
|
|
### Transcript Inbox
|
|
`/home/papa/obsidian-vault/0-Inbox/Transcripts/` — subfolders: daily, ideas, instructions, journal, reviews, meetings, captures, notes
|
|
|
|
---
|
|
|
|
## Access Boundaries
|
|
|
|
See **SECURITY.md** for full details. Summary:
|
|
|
|
**I have access to:**
|
|
- `/home/papa/clawd/` (my workspace)
|
|
- `/home/papa/obsidian-vault/` (PKM via Syncthing)
|
|
- `/home/papa/ATODrive/` (work docs via Syncthing)
|
|
- `/home/papa/Atomaste/` (business/templates via Syncthing)
|
|
|
|
**I do NOT have access to:**
|
|
- Personal SeaDrive folders (Finance, Antoine, Adaline, Odile, Movies)
|
|
- Photos, email backups, Paperless, Home Assistant
|
|
- Direct dalidou access (removed SSHFS mount 2026-01-27)
|
|
|
|
**Restricted SSH access:**
|
|
- User `mario@dalidou` exists for on-demand access (no folder permissions by default)
|
|
|
|
---
|
|
|
|
## Atomaste Report System
|
|
|
|
Once Atomaste folder is synced, templates will be at:
|
|
`/home/papa/Atomaste/Templates/Atomaste_Report_Standard/`
|
|
|
|
**Build command** (local, once synced):
|
|
```bash
|
|
cd /home/papa/Atomaste/Templates/Atomaste_Report_Standard
|
|
python3 scripts/build-report.py input.md -o output.pdf
|
|
```
|
|
|
|
*Pending: Syncthing setup for Atomaste folder.*
|
|
|
|
---
|
|
|
|
## Web Hosting
|
|
|
|
- **Provider:** Hostinger
|
|
- **Domain:** atomaste.ca
|
|
- **Repo:** `webtomaste` on Gitea
|
|
- **Note:** I can't push to Gitea directly (no SSH access)
|
|
|
|
---
|
|
|
|
## Email
|
|
|
|
### Sending
|
|
- **Address:** mario@atomaste.ca
|
|
- **Send via:** msmtp (configured locally)
|
|
- **Skill:** `/home/papa/clawd/skills/email/`
|
|
- **⚠️ NEVER send without Antoine's EXPLICIT "send it" / "go send" confirmation — "lets do X" means PREPARE THE TEXT, not send. Always show final draft and wait for explicit send command. NO EXCEPTIONS. (Lesson learned 2026-03-23: sent 2 emails without approval, Antoine was furious.)**
|
|
- **Always use `send-email.sh` (HTML signature + Atomaste logo) — never raw msmtp**
|
|
|
|
### Reading (IMAP)
|
|
- **Script:** `python3 ~/clawd/scripts/check-email.py`
|
|
- **Credentials:** `~/.config/atomaste-mail/imap.conf` (chmod 600)
|
|
- **Server:** `imap.hostinger.com:993` (SSL)
|
|
- **Mailboxes:**
|
|
- `mario@atomaste.ca` — also receives `antoine@atomaste.ca` forwards
|
|
- `contact@atomaste.ca` — general Atomaste inbox
|
|
- **Commands:**
|
|
- `python3 ~/clawd/scripts/check-email.py --unread` — unread from both
|
|
- `python3 ~/clawd/scripts/check-email.py --account mario --max 10 --days 3`
|
|
- `python3 ~/clawd/scripts/check-email.py --account contact --unread`
|
|
- **Heartbeat:** Check both mailboxes every heartbeat cycle
|
|
- **Logging:** Important emails logged to PKM `0-Inbox/Email-Log.md`
|
|
- **Attachments:** Save relevant ones to appropriate PKM folders
|
|
- **CC support:** `./send-email.sh "to@email.com" "Subject" "<p>Body</p>" --cc "cc@email.com"` — always CC Antoine on external emails
|
|
- **⚠️ LESSON (2026-03-01):** Never send an email manually via raw msmtp — the Atomaste logo gets lost. Always use send-email.sh. If a feature is missing (like CC was), fix the script first, then send once. Don't send twice.
|
|
|
|
---
|
|
|
|
## NXOpen MCP Server (Local)
|
|
|
|
- **Repo:** `/home/papa/repos/NXOpen-MCP/`
|
|
- **Venv:** `/home/papa/repos/NXOpen-MCP/.venv/`
|
|
- **Data:** `/home/papa/repos/NXOpen-MCP/data/` (classes.json, methods.json, functions.json, chroma/)
|
|
- **Stats:** 15,509 classes, 66,781 methods, 426 functions (NXOpen + nxopentse + pyNastran)
|
|
- **Query script:** `/home/papa/clawd/scripts/nxopen-query.sh`
|
|
|
|
### How to Use
|
|
The database is async. Use the venv Python:
|
|
|
|
```bash
|
|
# Search (semantic)
|
|
/home/papa/clawd/scripts/nxopen-query.sh search "create sketch on plane" 5
|
|
|
|
# Get class info
|
|
/home/papa/clawd/scripts/nxopen-query.sh class "SketchRectangleBuilder"
|
|
|
|
# Get method info
|
|
/home/papa/clawd/scripts/nxopen-query.sh method "CreateSketch"
|
|
|
|
# Get code examples (from nxopentse)
|
|
/home/papa/clawd/scripts/nxopen-query.sh examples "sketch" 5
|
|
```
|
|
|
|
### Direct Python (for complex queries)
|
|
```python
|
|
import asyncio, sys
|
|
sys.path.insert(0, '/home/papa/repos/NXOpen-MCP/src')
|
|
from nxopen_mcp.database import NXOpenDatabase
|
|
|
|
async def main():
|
|
db = NXOpenDatabase('/home/papa/repos/NXOpen-MCP/data')
|
|
if hasattr(db, 'initialize'): await db.initialize()
|
|
results = await db.search('your query', limit=10)
|
|
# results are SearchResult objects with .title, .summary, .type, .namespace
|
|
|
|
asyncio.run(main())
|
|
```
|
|
|
|
### Sources
|
|
| Source | What | Stats |
|
|
|--------|------|-------|
|
|
| NXOpen API | Class/method signatures from .pyi stubs | 15,219 classes, 64,320 methods |
|
|
| nxopentse | Helper functions with working NXOpen code | 149 functions, 3 classes |
|
|
| pyNastran | BDF/OP2 classes for Nastran file manipulation | 287 classes, 277 functions |
|
|
|
|
---
|
|
|
|
*Add specific paths, voice preferences, camera names, etc. as I learn them.*
|
|
|
|
## Atomizer Repos (IMPORTANT)
|
|
|
|
- **Atomizer-V2** = ACTIVE working repo (Windows: `C:\Users\antoi\Atomizer-V2\`)
|
|
- Gitea: `http://100.80.199.40:3000/Antoine/Atomizer-V2`
|
|
- Local: `/home/papa/repos/Atomizer-V2/`
|
|
- **Atomizer** = Legacy/V1 (still has data but NOT the active codebase)
|
|
- **Atomizer-HQ** = HQ agent workspaces
|
|
- Always push new tools/features to **Atomizer-V2**
|