KB-OS — Knowledge Base Operating System
Section titled “KB-OS — Knowledge Base Operating System”The unified vault at D:\FSS\KB\ is the operating system for managing Talbot’s businesses and (eventually) personal domains.
- SSOT for all information, providing clear context for AI agents and humans
- Context for any scope (departments, single/multiple/all businesses).
- Memory system: automatic, learning, efficient. See KB-OS-Context.
- Local KB
- privacy
- off-line functionality
- No vendor lock-in
- with AI models or KB format (Obsidian markdown files in folders)
- AI model independence
- can us local and multiple models for token efficiency
- Integrated task/project management. See SMTM_System.
Vault Layout
Section titled “Vault Layout”D:\FSS\KB\├── Core\ — Cross-business: governance, AI, processes, logs, misc├── MBR\ — myBetterRates├── SDC\ — $MART DEBT Coach├── FSS\ — Talbot Stevens└── .obsidian\ — Vault config (plugins, themes, settings — one for all)Key rule: Content that applies to two or more businesses lives in Core\. Content specific to one business lives in that business’s folder.
Navigation Entry Points
Section titled “Navigation Entry Points”| File | Purpose |
|---|---|
Core\CONSTITUTION.md | Vault charter — mission, structure rules, governing principles |
Core\DASHBOARD.md | Operational hub — current focus, recent decisions, active projects |
<Biz>\<Dept>\JOB_DESCRIPTION.md | Dept scope, responsibilities, and SSOT links |
Start at CONSTITUTION to understand the whole; start at DASHBOARD for current work.
DASHBOARD.md vs Folder Note: DASHBOARD.md is reserved for elevated hubs — vault root, business roots, an Ongoing-Project home, or a purpose-built dept index (e.g. Core/AI/Skills/DASHBOARD.md). Ordinary content folders use a Folder Note instead (Waypoint-generated, see Folder Notes.md) — cheap, auto-maintained, the right default everywhere else. Where a folder is both (an Ongoing-Project home that’s also an ordinary Obsidian folder), DASHBOARD.md wins and serves double duty — no separate Folder Note is created for it. Worked example: Core/Processes/Projects/KB-OS/DASHBOARD.md.
Standard Department Structure
Section titled “Standard Department Structure”Each business (MBR, SDC, FSS) uses a dept-first layout:
| Folder | Contains |
|---|---|
Strategy\ | Identity, positioning, IP, competitive analysis |
IT\ | Systems, processes, dev standards, UX |
Mktg\ | Brand, content, distribution, growth |
Offerings\ | Products, services, pricing |
Notes\ or Misc\ | Notes without a clear dept home |
_WorkingOn\ | Active tasks, projects, research |
Not every dept exists until there’s content to put in it (activate on first need).
Core Departments
Section titled “Core Departments”| Dept | Contents |
|---|---|
AI\ | Claude Code, skills, prompting guides, AI tool notes |
Cancer50\ | Cross-business pledge coordination |
IT\ | Cross-business IT (apps, infrastructure) |
Logs\ | AI, Branding, Dev, Decisions, Projects, Snapshots, System logs |
Misc\ | Clippings, Glossary, meeting notes, miscellaneous |
Processes\ | SMTM, KB-OS, Software Dev, cheatsheets |
Utils\ | Custom and external utility references |
Task Management (SMTM)
Section titled “Task Management (SMTM)”Full guide: Core\Processes\Simple Markdown Task Management\SMTM_System.md
Key rules (SMTM v5.2+ dept routing):
- Dept-owned tasks:
<Biz>\<Dept>\Tasks\<Name>.md(e.g.Core\IT\Tasks\,Core\Processes\Tasks\) — no date prefix - KB-native Ongoing Project tasks: self-contained in
Core\<Dept>\Projects\<name>\Tasks\(e.g. KB-OS) - Cross-dept / vault-level tasks:
Core\_WorkingOn\Tasks\<Name>.md; master tracker:Core\_WorkingOn\Tasks\_active.md - Logs:
YYYY-MM-DD_Description.mdin the owning dept’sLogs\(date prefix on logs, not tasks) - Scratch:
_WorkingOn\Tasks\_tmp.mdper business — Talbot’s personal scratch space, never modified by AI without explicit request - Scaffold a new Task: right-click any
Tasks\folder → New File — the SMTM Templater wizard fires via file regex.*/Tasks/.*(v5.4) and auto-registers the task /task-startand/task-continueauto-load the owning dept’s charter chain (JOB_DESCRIPTION → Staff file → project STATUS) from the task’s path (2026-07-09); team org chart:Agent-Team.md
Ideas Workflow (Capture-Routing)
Section titled “Ideas Workflow (Capture-Routing)”Full guide: Core\Processes\Capture-Routing.md (consolidated from Core\Ideas-Workflow.md, 2026-07-09)
Summary:
- Capture — bullet in appropriate
<Dept>\Inbox.md(or_tmp.mdwhen routing uncertain) - Promote — when ready to act, convert to TaskNote in
<Dept>\Tasks\<Name>.md - Archive — completed/parked tasks move to
<Dept>\Tasks\archive\YYYY-MM\
Mobile capture: Obsidian mobile → dept Inbox directly.
Research Artifacts (added 2026-08-14)
Section titled “Research Artifacts (added 2026-08-14)”_WorkingOn\ means active — so a finished research report that remains foundational must not stay there. Research follows the same three-stage lifecycle as tasks, owned by the dept whose decisions it informs:
| Stage | Location | Meaning |
|---|---|---|
| In flight | <Biz>\_WorkingOn\Research\<topic>.md | Being produced; may change daily |
| Enduring | <Biz>\<Dept>\Research\<topic>.md | Complete, frozen, still load-bearing for that dept’s decisions |
| Superseded | <Biz>\<Dept>\Research\archive\YYYY-MM\ | Replaced by newer research, or the decision it informed is closed |
The split that matters: freeze the evidence, keep the synthesis living.
- A research report is a dated snapshot of what the evidence said. Once complete it is frozen — corrections only, never rewritten. It lives in
<Dept>\Research\. - A synthesis note is the living SSOT that acts on that evidence. It lives in the dept folder proper and is edited freely.
Worked example (2026-08-14): Behavioural-Solutions is the living Strategy SSOT; Behavioral-Knowing-Doing-Gap and Behavioral-Barriers-Playbook are frozen in Core\Processes\Research\; the Gemini research they superseded sits in Core\Processes\Research\archive\2026-08\.
Keeping them apart prevents two failure modes: a living document quietly losing the citations that justified it, and a frozen report being edited until it no longer describes what was actually found.
Conventions
Section titled “Conventions”| Rule | Detail |
|---|---|
| Folder Notes (Waypoint) | Ordinary content folders get a Folder Note (Waypoint-generated MOC) — see Folder Notes.md. Elevated hubs (vault/business root, Ongoing-Project home, dept index) use DASHBOARD.md instead. |
Misc\ per business | Notes without a clear dept home go here, not spread across folders. |
| Wikilinks | Use bare filename (no path prefix) for stability across restructures — path-prefixed links break on folder rename. Exception: when the same filename exists in more than one vault location (DASHBOARD.md, Focus.md, Vision.md, Strategic Plan.md, UPGRADES.md, …), always path-qualify: [Focus](/mbr/_workingon/focus/) — bare links resolve first-occurrence-wins, non-deterministically. |
link vs !embed | A plain wikilink (Note) points at content — the note still has to duplicate the text alongside the link, which is itself an SSOT violation waiting to happen. An embed (!Note, or !Note for just one section) transcludes the target’s actual content — nothing is duplicated, there’s exactly one place to edit. Use embeds whenever a note’s job is to display another note’s SSOT content (not just reference it) — e.g. MBR/_WorkingOn/Focus.md and SDC/_WorkingOn/Focus.md embed their business’s Strategy/Identity/Mission.md rather than restating the mission text. Renders natively in Obsidian; any downstream build (e.g. the monorepo focus-page loaders, sites/{mbr,sdc}/src/utils/load-focus-content.ts) has to resolve embeds itself outside Obsidian. See Mission-SSOT (Focus/logs/) for the worked example. |
| SSOT | One home per concept. Never copy content to a second location — create a pointer instead. |
| Git | Single repo at D:\FSS\KB\. Commit after any session that adds substantive content. |
AI Agent Usage
Section titled “AI Agent Usage”CLAUDE.md files — each _WorkingOn\ has a CLAUDE.md providing project-specific context to Claude Code sessions. The global ~/.claude/CLAUDE.md sets cross-project behavior.
Graphify — knowledge graph lives at Core\Misc\graphify-out\. To regenerate:
- Run
/graphifyfrom the main Claude Code session (not a background agent — API key required) .graphifyignoreat vault root excludes plugin JS,.git\, graphify-out itself
Claude Code entry points:
- Vault-level work: open session in
D:\FSS\KB\ - MBR work: open session in
D:\FSS\KB\MBR\_WorkingOn\(picks upCLAUDE.mdthere) - Core/cross-business: open in
D:\FSS\KB\Core\_WorkingOn\
Git Repository
Section titled “Git Repository”Single repo initialized 2026-06-09 at D:\FSS\KB\. Initial commit: b157a9e (791 files).
.gitignore excludes: **/graphify-out/, workspace.json, plugin compiled JS, OS artifacts.
.gitattributes: * text=auto (normalizes CRLF/LF across platforms).
No remote configured — local-only as of 2026-06-09.
Obsidian Bases plugin (core plugin — Settings → Core plugins → Bases)
Section titled “Obsidian Bases plugin (core plugin — Settings → Core plugins → Bases)”| Issue | Wrong | Correct |
|---|---|---|
| Code fence name | ```bases (plural) | ```base (singular) |
| Filter format | property/condition/value YAML (Dataview style) | Expression syntax |
| Equality filter | status = "ready" | status == "ready" (double ==) |
| Not-equal filter | — | status != "complete" |
| Grouping | groupBy: risk (not supported) | Sort by field — no native groupBy |
| Folder scope | from: "_WorkingOn/Tasks" | file.inFolder("_WorkingOn/Tasks") in filters |
| Column selection | properties: [...] in code block (ignored) | Click Properties (≡) in table toolbar — Obsidian writes order: |
| Nested boolean groups | and: list containing a nested or: sub-list | Confirmed broken (2026-07-07): a Core/DASHBOARD.md query nesting or: under and: rendered as a table but silently ignored the recency filter — every matching file showed regardless of file.mtime. Splitting into two separate flat and:-only blocks (no nesting) fixed it immediately, with the exact same file.mtime filter unchanged. Always use flat and: lists — one block/view per distinct path scope instead of or:-combining paths. |
| Relative date filter | — | Confirmed working (2026-07-07): file.mtime > now() - "14 days" filters correctly when used in a flat and: list (no nested or:). The date arithmetic itself was never the problem — see Nested boolean groups above. |
Minimal working Bases block:
filters: and: - file.inFolder("_WorkingOn/Tasks") - status != "complete"views: - type: table name: All Active Tasks sort: - property: risk direction: DESCDeviating from this structure causes silent failure — the block renders as raw text with no error message.