Files
ATOCore/t420-openclaw/TOOLS.md

12 KiB

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.csvreceipts/
  • 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 ~/.gitconfigALWAYS 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):

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:

# 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)

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