Scalable Knowledge Architecture & Technology Engine
Turn live improvement workshops into governed organizational memory, retrieve only the evidence that matters, and generate traceable, ranked improvement opportunities your team can act on.
🏆 Productivity & Enterprise Solutions Winner — Orion Global Hackathon 2026 on Devpost
You can't vibe code personality. SKATE has attitude: skateboard themes, Spotter, The GRIND, and actions you land. Built for the energy of a real workshop, with human judgment at the center.
SKATE was one of several winning apps in the Orion Global Hackathon 2026, earning recognition as a winner in Productivity & Enterprise Solutions.
| Event | Orion Global Hackathon 2026 — Where Operations Research Meets Innovation |
| Category | Productivity & Enterprise Solutions |
| Recognition | Winner — Productivity & Enterprise Solutions |
| Current source | v1.2.0 — September workshop updates; testing continues |
Operations improvement lives and dies in workshops: kaizen events, root-cause sessions, design-thinking sprints, voice-of-customer reviews. These sessions create some of an organization's most valuable knowledge — and some of its most disposable. Observations, decisions, pain points, quotes, and unanswered questions disappear into notebooks, raw meeting transcripts, and disconnected AI summaries. When a team revisits the work, it either starts over or sends an entire transcript back to a model and hopes the important evidence is still visible.
The result is a measurable operations problem: repeated discovery work, decisions divorced from their supporting evidence, and improvement actions that lose their provenance the moment the meeting ends.
SKATE is a workshop operating system, not another note-taking app. It captures natural meeting notes, preserves important signals as typed and linked memory, retrieves a bounded evidence set for AI reasoning, and turns that evidence into a traceable, ranked design-thinking synthesis — from observations to pain points to How-Might-We prompts to concrete solution starters.
Its hybrid memory combines a typed knowledge graph, optional local vector search, and keyword retrieval. Graph links explain how evidence connects; vector search finds related meaning. Markdown files remain the source of truth, with local embeddings providing the semantic index. SKATE is free, MIT-licensed software; optional cloud providers bill separately.
flowchart LR
A["Workshop conversation"] --> B["Spotter captures signals"]
B --> C["Governed Markdown memory"]
C --> D["Hybrid evidence retrieval"]
D --> E["LLM reasoning (your provider, local, or none)"]
E --> F["The GRIND"]
F --> G["Ranked pain points, HMW prompts, and solution starters"]
SKATE treats a workshop as a data-generating process and applies a disciplined pipeline to it:
#P pain, #O observation, #A action, #Q question, #S solution, #R recommendation, and #I insight. Notes can also use one of 14 object types, including decision and risk.supports, contradicts, causes, leads_to, references). Analysis runs only on governed, in-scope evidence.Testing is continuing. These additions are in the source; packaged apps need a new build. Installer downloads are published separately on GitHub Releases.
.docx, then preview folder-to-session grouping and optional heading splits. This is a text-only importer: embedded photos/files are not copied, PDF has no OCR, and .one, .onepkg, .mht, .xps, and notebook ZIPs are unsupported.See September 2026 updates for the full changes, verification, and remaining testing.
| Capability | Status |
|---|---|
| Local-first Markdown/YAML memory with typed relationships | Working |
| Spotter and Spotter Live workshop capture | Working |
| Live transcription and spoken agent talk-back (OpenAI realtime voice) | Working |
| Local Whisper and optional ElevenLabs speaker diarization | Working |
| 2D/3D knowledge graph with paged notes and signal detail; Excel export | Working |
| GRIND design-thinking synthesis | Working |
| Choice of AI provider: OpenAI, Anthropic, OpenRouter, local LM Studio, or no AI at all | Working |
| The Lineup for flexible, session-linked, and recurring Standard Work actions | Working |
| Skater levels: gamified progress from Grom to 900 Legend on the Stats page | Working |
| MCP server for MCP-enabled agents: governed reads plus additive writes (STDIO and Streamable HTTP) | Working |
Agent access to The Lineup via MCP (get_lineup) | Working |
| One-click MCP setup for both Codex/ChatGPT desktop and Claude Desktop (classic and Microsoft Store installs) | Working |
| Windows installer with bundled MCP executable | Working |
| App-agnostic meeting recorder — records what the PC hears (Teams, Zoom, Meet, Webex, anything), no bot in the call, local transcription | Working |
| Saved WAV + transcript, recording-status tray icon, and stop-and-save from the tray | Added in 1.2.0 source; desktop testing continues |
| Reviewed transcript cleanup with progress, cancellation, and original-text attachment | Working |
| Recoverable note/session Trash, saved API-key removal, and note/session PDF views | Working |
| Paste (Ctrl+V) or drag screenshots and files into notes, stored in the session folder with a visual gallery | Working |
| Bounded AI synthesis payload with relevance-based selection over long notes and transcripts | Working |
Reproducible retrieval benchmark with analytic chance baselines (tools/benchmark_retrieval.py) | Working |
| Self-bootstrapping launcher: finds a compatible Python or installs one privately, no admin rights | Working |
supports, contradicts, causes, leads_to, and references.#A bullets from ordinary notes into traceable checklist items.| Traditional AI notes | SKATE |
|---|---|
| Produces a meeting summary | Builds governed organizational memory |
| Sends a full transcript as context | Retrieves a bounded set of relevant evidence |
| Stores flat pages or informal backlinks | Maintains typed evidence and causal relationships |
| Centers a chat box | Operates as a workshop capture and synthesis system |
| Applies generic summarization | Follows a design-thinking path from evidence to action |
| Hides the source of an answer | Links outputs back to inspectable source notes |
| Ends with prose | Produces ranked pain points, How-Might-We prompts, solution starters, and Excel outputs |
| Loses follow-through in meeting notes | Surfaces captured actions in The Lineup and preserves their source-note link |
Obsidian is an excellent personal knowledge workspace. SKATE addresses a different job: helping facilitators and improvement teams convert a live, multi-person workshop into governed, reusable evidence and then deliberately synthesize that evidence into improvement opportunities.
The other category SKATE gets compared to is the meeting notetaker — Granola, Otter, Fireflies, Spinach. Fine products for personal use, but they record meetings; SKATE remembers engagements. The differences are structural, and they matter most in exactly the rooms where enterprise productivity tools get used — client engagements, HR conversations, legal and strategy sessions:
| SKATE | The notetaker category | |
|---|---|---|
| How it captures | Records what the PC hears — any meeting app, no bot joining the call | A visible bot joins the call, or capture routes through the vendor |
| Calendar and tenant access | None requested, ever | A Google/Microsoft calendar connection is commonly required for auto-join |
| Where your audio goes | Never leaves the machine — transcription is local | Vendor-cloud transcription and summarization |
| Vendor training on your content | Impossible: there is no vendor | Varies by vendor and plan; some train by default unless you opt out |
| What you get back | Governed, typed, linked memory plus a ranked design-thinking synthesis | A summary and an action list |
| Price | $0 — MIT-licensed, self-hosted | Per-user monthly SaaS |
Even the notetaker with the closest capture model still transcribes every recording in its own cloud. For confidential material, local-only processing is not a preference — it is the difference between a productivity tool and a data-governance decision. SKATE is the only option in the comparison that removes the vendor entirely.
flowchart LR
W["Workshop"] --> S["Spotter + physical HMI"]
S --> M["Markdown/YAML memory"]
M --> R["Lexical + optional semantic retrieval"]
R --> O["Provider layer: OpenAI, Anthropic, OpenRouter, LM Studio, or none"]
O --> G["LLM reasoning"]
G --> D["The GRIND"]
D --> X["Traceable ideas and exports"]
M --> P["Governed SKATE MCP server"]
P --> C["MCP-enabled agents and desktop clients"]
P -. "Authenticated HTTPS tunnel" .-> H["Hosted agent surfaces"]
The local vault remains the source of truth. Search indexes and embeddings are rebuildable acceleration layers, not proprietary memory. Cloud services are explicit and optional except when the user requests their capabilities.
SKATE is deliberately not locked to any AI vendor. Pick the reasoning engine that fits your privacy posture and budget in Settings:
| Provider | What it means |
|---|---|
| No AI | Every non-model feature still works: capture, governance, retrieval, graphs, The Lineup, exports, and a deterministic local synthesis. Nothing ever leaves the machine. |
| LM Studio | A local LLM on your own hardware through LM Studio's OpenAI-compatible server. Private reasoning, no API key. |
| OpenAI | GPT-5.6 family through the Responses API, with selectable reasoning effort. |
| Anthropic | Claude Sonnet, Opus, or Haiku through the Messages API. |
| OpenRouter | Any hosted model — Claude, GPT, Gemini, Llama, Mistral — with a single key. |
The same vendor-agnostic stance applies to agent access: the installer can register SKATE's MCP server with Codex/ChatGPT desktop and Claude Desktop in one click each.
The central AI task in SKATE is not "summarize this meeting." It is a constrained, evidence-heavy reasoning problem across multiple notes: recognize recurring tensions, distinguish observations from proposed solutions, preserve source traceability, reframe problems without embedding a preferred answer, and generate concrete starting points for experimentation.
The reasoning pipeline (implemented in ui/app.py, routed through the provider selected in Settings):
GRIND is the part of SKATE where workshop memory becomes forward motion. It reads the signals people captured in the room and follows a design-thinking progression:
flowchart LR
O["Observations and quotes"] --> P["Patterns and pain points"]
P --> H["How Might We prompts"]
H --> I["Solution starters"]
I --> E["Next experiments"]
GRIND reads whole notes, not just their openings — a pain point described three paragraphs into an unmarked note still reaches the synthesis, while explicitly marked signals continue to outrank inferred ones. When a session exceeds its context budget, evidence is selected by relevance rather than truncated: marked lines, keyword-scored paragraphs, and each note's opening and closing survive, with [...] marking elisions, and the whole payload stays bounded (~12K tokens) no matter how large the vault grows. GRIND respects note and session governance: inactive notes are retained in the vault but excluded from analysis, and inactive sessions do not appear as GRIND targets. Its outputs stay connected to evidence:
The 2D and 3D views make the same memory inspectable as a network of notes, themes, and typed rails. The graph is not the memory system itself; it is a lens for seeing relationships that are difficult to notice in a folder of documents.
SKATE's MCP server lets any MCP-enabled agent ask for the smallest useful slice of workshop memory rather than receiving an entire meeting transcript. Reads are governed and bounded; writes are deliberately narrow — an agent can add new notes and sessions with explicit agent provenance, but can never edit or delete existing memory, and write approval behavior depends on the MCP client’s permission settings. MCP is the interface; SKATE's governed Markdown, relationships, retrieval, and provenance remain the memory architecture behind it.
sequenceDiagram
participant C as MCP-enabled agent
participant M as SKATE MCP server
participant V as Local SKATE vault
C->>M: search_memory(query, session, top_k)
M->>V: hybrid retrieval + governance filter
V-->>M: bounded evidence with provenance
M-->>C: relevant notes and source links
C->>M: trace_evidence(memory_id)
M-->>C: supporting and conflicting context
Available tools:
| Tool | Purpose |
|---|---|
list_active_sessions | Show the workshop memories available to an agent |
search_memory | Return a small ranked evidence set for a query |
get_memory_object | Read a governed note in bounded pages; returns linked original sources |
get_memory_original | Read a linked unedited original in bounded pages; follows the parent note's access rules |
get_session_context | Retrieve a bounded overview of one session |
trace_evidence | Follow provenance and typed relationships |
get_grind_outputs | Retrieve the most recent design-thinking synthesis |
get_lineup | See open and landed Action Items and recurring Standard Work |
add_note | Add one new governed memory object with agent provenance (additive only) |
create_session | Create a new empty workshop session |
search / fetch | Compatibility tools for knowledge and research surfaces |
Configure SKATE MCP for Codex.bat / Configure SKATE MCP for Claude Desktop.bat from the installation folder, then restart the desktop client.Start SKATE.bat.Start SKATE MCP HTTP.bat, keep the endpoint private at http://127.0.0.1:8766/mcp, and connect it through an authenticated HTTPS tunnel. Never expose the unauthenticated local endpoint directly to the internet.
In skateboarding, the person attempting the trick is not entirely alone. A spotter watches the surrounding environment, looks out for approaching hazards, helps determine when the path is clear, and supports the skater without taking over the attempt. The role is an alert, trusted safety net operating just outside the spotlight.
SKATE's Spotter serves the same purpose in a workshop. The facilitator still leads the room and makes the judgment calls; Spotter listens at the edge of the session, preserves important signals, identifies risks and gaps, and helps the team move forward without replacing the human leading the work.
Spotter helps capture pains, observations, questions, actions, solutions, recommendations, and insights without forcing the facilitator to disengage from the room. Spotter Live can maintain a timestamped transcript with live transcription and speak responses aloud. Local Whisper keeps transcription on the machine, while optional ElevenLabs Scribe Realtime adds speaker diarization such as Speaker 1 and Speaker 2.
Choose Record a Meeting in the sidebar or on a session page. Spotter Live captures what the PC hears through WASAPI loopback, optionally mixed with the microphone. It works with sound from Teams, Zoom, Meet, Webex, or other apps, with no bot in the participant list and no calendar or tenant connection. Select an existing session or create one in the dropdown before starting.
Stopping saves both the WAV audio and a markdown transcript note in that session. The note links to its audio, and Spotter Live offers both links. WAV files live in the session's attachments folder and use about 115 MB per hour. Transcription runs on-device through faster-whisper; if it fails, the saved WAV remains available to download and retry.
In the desktop tray app, closing the window hides it while recording continues. The tray shows a skateboard when not recording and a red circle during capture. Hover for recording status or transcription progress. Right-click Stop recording & save to finish without reopening the window. Exit SKATE closes the application, so wait until audio and transcript are saved before exiting.
For an existing phone or field recording, import the audio/video file through the note editor. Imported files are processed temporarily; keep their originals separately. The PC recorder and imported-file transcription stay local. The separate Start listening room-caption feature uses the local or cloud engine selected in Settings and continues while you navigate within SKATE’s preserved live workspace. The Info tab includes a How to record & transcribe a meeting walkthrough.
After cleanup, agents can use get_memory_object to find original_sources, then get_memory_original with the note's memory_id and a linked source_id. Continue with next_offset until it is null to read long sources completely. Save the note first and restart the updated MCP server/client to load the new tool.
The Stream Deck turns facilitation methods into one-press stances: Observe, Find Waste, 5 Whys, How Might We, Frame, Test, Start, and Stop. The facilitator can change the agent's mode without breaking eye contact or navigating a menu. Custom icons and the hotkey map are in streamdeck-neo-icons/.
The custom 3D-printed skateboard-wheel housing holds a conference microphone array at the center of the table. It gives the otherwise invisible agent a memorable, understandable place in the workshop. Build files and the hardware guide are in hardware-spotter-mic-puck/.
Every performance number in this README reproduces from a harness committed to the repository:
python tools/benchmark_retrieval.py # retrieval quality, chance baselines, exact CI
python tools/benchmark_retrieval.py --scale # payload vs. vault size
top_k, not by corpus size.tests/test_synthesis_payload.py).Limitations, stated plainly: n = 10 author-labelled queries (no public benchmark exists for workshop-note retrieval); the scale sweep bounds payload, not ranking quality; token counts use SKATE's own chars÷4 estimator. The harness prints the same caveats it was built under.
The repository includes fictional nonprofit workshop material for Harborlight. It demonstrates the product without exposing client or personal data.
A judge can follow this story:
#O observation, #P pain, #Q question, and #A action.#A actions as traceable checklist items.python tools/benchmark_retrieval.py.Requirements: Windows. Python itself is optional — Start SKATE.bat finds a compatible installed Python (3.10+) or bootstraps a private CPython automatically via tools/bootstrap-python.ps1, with no admin rights required.
git clone https://github.com/SixSigmaEngineer/skate-workshop-os.git
cd skate-workshop-os
Then double-click Start SKATE.bat. On first run it creates a private .venv, installs the required packages, starts the local service, and opens the SKATE native app window. Use Stop SKATE.bat to stop the local service.
For the desktop tray behavior, close that instance after setup and launch Start SKATE.pyw. The .bat launcher runs without a tray icon, so its window must stay open during recording.
Open Settings and choose an AI provider — OpenAI, Anthropic, OpenRouter, a local LM Studio server, or No AI for a fully offline experience. An OpenAI key additionally powers live transcription and spoken agent responses; an ElevenLabs key is optional and only needed for speaker diarization. For fully local transcription, run Install Local Whisper.bat once and restart SKATE.
py -3.13 -m venv .venv
.venv\Scripts\python -m pip install -r ui\requirements.txt
.venv\Scripts\python ui\app.py
The local service binds to 127.0.0.1:8765. Add --reload for development or --browser only when you intentionally want the browser version.
Run Build Installer.bat to package the current source as 1.2.0. It produces build\installer\SKATE-Setup.exe. The installer retains SKATE's application identity so it can update an existing installation in place; uninstalling first is normally unnecessary. Finish and save any recording, then exit SKATE before running the installer. Existing notes and settings stay in the user's vault. Installer upgrade and real-device recording checks are still part of the ongoing 1.2.0 testing.
| Capability | Requirement |
|---|---|
| GRIND and Spotter reasoning | OpenAI, Anthropic, or OpenRouter API key — or LM Studio locally, or none |
| Local audio/video transcription | Included: faster-whisper ships with the app (models download on first use); classic openai-whisper remains an option via Install Local Whisper.bat |
| Live transcript and spoken Spotter responses | OpenAI API key (realtime voice models) |
| Optional realtime speaker diarization | ElevenLabs API key and Scribe Realtime |
| Local semantic retrieval | FastEmbed or Ollama with nomic-embed-text |
| Basic retrieval and manual notes | No cloud service required |
127.0.0.1, not a public network interface by default.settings.json, private conversations, transcripts, logs, and local model artifacts are excluded through .gitignore.| Layer | Technology |
|---|---|
| Application | Python, FastAPI, Jinja2, pywebview |
| AI reasoning | Selectable: OpenAI (Responses API), Anthropic (Messages API), OpenRouter, local LM Studio, or none |
| Memory | Markdown, YAML frontmatter, typed relationships |
| Retrieval | Weighted lexical scoring, optional FastEmbed or Ollama embeddings |
| Speech | OpenAI realtime transcription and voice; Local Whisper fallback; optional ElevenLabs diarization |
| Meeting capture | WASAPI system-audio loopback (soundcard) mixed with the microphone; on-device faster-whisper transcription |
| Visualization | Canvas knowledge graph with 2D/3D views; interactive Three.js board on Info |
| Export | Excel workshop synthesis; note/session Print / Save PDF |
| Physical HMI | Elgato Stream Deck Neo and custom microphone housing |
| Agent access | Official MCP Python SDK; STDIO and Streamable HTTP |
skate-workshop-os/
|-- ui/ application, routes, templates, and static assets
|-- demo-vault/ fictional Harborlight demonstration material
|-- workshop-knowledge-documents/ facilitation and methodology corpus (user-supplied)
|-- streamdeck-neo-icons/ physical-control icons and hotkey map
|-- hardware-spotter-mic-puck/ microphone enclosure files and build guide
|-- mcp_server/ governed MCP tools and transports
|-- tests/ automated test suite
|-- tools/ project utilities
|-- Start SKATE.bat one-click Windows launcher
|-- Stop SKATE.bat local-service stop command
|-- TECH_STACK.md deeper implementation notes
`-- LICENSE MIT license
The maintainer's local Push SKATE to GitHub.bat stages eligible files, creates a commit, and pushes main to SixSigmaEngineer/skate-workshop-os. Review git status --short first, then double-click the batch file or pass a commit message from a terminal. The batch file stays local and is intentionally ignored by Git.
Source, tests, documentation, and generated badge/winner artwork are included. Local settings, credentials, recordings, original-note attachments, caches, and private vault data must stay excluded. A source push does not rebuild or publish an installer: run Build Installer.bat, test the resulting installer, and publish the executable separately when ready.
Thank you to the dev team for building the ramps and helping SKATE land each new idea. Founding testers Brian Khorshad and Joe Wise took the early runs, found the rough spots, and helped make the next ride better. Their credits are part of the app, independent of any user's vault.
SKATE is available under the MIT License. Hardware components and third-party services remain subject to their respective licenses and terms.
SKATE turns conversations into memory, memory into evidence, and evidence into better ideas.

Skatetocat © GitHub, from the Octodex
Python
53.1%
HTML
31.7%
CSS
6.0%
JavaScript
5.4%
PowerShell
2.2%
Batchfile
1.5%
Scalable Knowledge Architecture & Technology Engine
Turn live improvement workshops into governed organizational memory, retrieve only the evidence that matters, and generate traceable, ranked improvement opportunities your team can act on.
🏆 Productivity & Enterprise Solutions Winner — Orion Global Hackathon 2026 on Devpost
You can't vibe code personality. SKATE has attitude: skateboard themes, Spotter, The GRIND, and actions you land. Built for the energy of a real workshop, with human judgment at the center.
SKATE was one of several winning apps in the Orion Global Hackathon 2026, earning recognition as a winner in Productivity & Enterprise Solutions.
| Event | Orion Global Hackathon 2026 — Where Operations Research Meets Innovation |
| Category | Productivity & Enterprise Solutions |
| Recognition | Winner — Productivity & Enterprise Solutions |
| Current source | v1.2.0 — September workshop updates; testing continues |
Operations improvement lives and dies in workshops: kaizen events, root-cause sessions, design-thinking sprints, voice-of-customer reviews. These sessions create some of an organization's most valuable knowledge — and some of its most disposable. Observations, decisions, pain points, quotes, and unanswered questions disappear into notebooks, raw meeting transcripts, and disconnected AI summaries. When a team revisits the work, it either starts over or sends an entire transcript back to a model and hopes the important evidence is still visible.
The result is a measurable operations problem: repeated discovery work, decisions divorced from their supporting evidence, and improvement actions that lose their provenance the moment the meeting ends.
SKATE is a workshop operating system, not another note-taking app. It captures natural meeting notes, preserves important signals as typed and linked memory, retrieves a bounded evidence set for AI reasoning, and turns that evidence into a traceable, ranked design-thinking synthesis — from observations to pain points to How-Might-We prompts to concrete solution starters.
Its hybrid memory combines a typed knowledge graph, optional local vector search, and keyword retrieval. Graph links explain how evidence connects; vector search finds related meaning. Markdown files remain the source of truth, with local embeddings providing the semantic index. SKATE is free, MIT-licensed software; optional cloud providers bill separately.
flowchart LR
A["Workshop conversation"] --> B["Spotter captures signals"]
B --> C["Governed Markdown memory"]
C --> D["Hybrid evidence retrieval"]
D --> E["LLM reasoning (your provider, local, or none)"]
E --> F["The GRIND"]
F --> G["Ranked pain points, HMW prompts, and solution starters"]
SKATE treats a workshop as a data-generating process and applies a disciplined pipeline to it:
#P pain, #O observation, #A action, #Q question, #S solution, #R recommendation, and #I insight. Notes can also use one of 14 object types, including decision and risk.supports, contradicts, causes, leads_to, references). Analysis runs only on governed, in-scope evidence.Testing is continuing. These additions are in the source; packaged apps need a new build. Installer downloads are published separately on GitHub Releases.
.docx, then preview folder-to-session grouping and optional heading splits. This is a text-only importer: embedded photos/files are not copied, PDF has no OCR, and .one, .onepkg, .mht, .xps, and notebook ZIPs are unsupported.See September 2026 updates for the full changes, verification, and remaining testing.
| Capability | Status |
|---|---|
| Local-first Markdown/YAML memory with typed relationships | Working |
| Spotter and Spotter Live workshop capture | Working |
| Live transcription and spoken agent talk-back (OpenAI realtime voice) | Working |
| Local Whisper and optional ElevenLabs speaker diarization | Working |
| 2D/3D knowledge graph with paged notes and signal detail; Excel export | Working |
| GRIND design-thinking synthesis | Working |
| Choice of AI provider: OpenAI, Anthropic, OpenRouter, local LM Studio, or no AI at all | Working |
| The Lineup for flexible, session-linked, and recurring Standard Work actions | Working |
| Skater levels: gamified progress from Grom to 900 Legend on the Stats page | Working |
| MCP server for MCP-enabled agents: governed reads plus additive writes (STDIO and Streamable HTTP) | Working |
Agent access to The Lineup via MCP (get_lineup) | Working |
| One-click MCP setup for both Codex/ChatGPT desktop and Claude Desktop (classic and Microsoft Store installs) | Working |
| Windows installer with bundled MCP executable | Working |
| App-agnostic meeting recorder — records what the PC hears (Teams, Zoom, Meet, Webex, anything), no bot in the call, local transcription | Working |
| Saved WAV + transcript, recording-status tray icon, and stop-and-save from the tray | Added in 1.2.0 source; desktop testing continues |
| Reviewed transcript cleanup with progress, cancellation, and original-text attachment | Working |
| Recoverable note/session Trash, saved API-key removal, and note/session PDF views | Working |
| Paste (Ctrl+V) or drag screenshots and files into notes, stored in the session folder with a visual gallery | Working |
| Bounded AI synthesis payload with relevance-based selection over long notes and transcripts | Working |
Reproducible retrieval benchmark with analytic chance baselines (tools/benchmark_retrieval.py) | Working |
| Self-bootstrapping launcher: finds a compatible Python or installs one privately, no admin rights | Working |
supports, contradicts, causes, leads_to, and references.#A bullets from ordinary notes into traceable checklist items.| Traditional AI notes | SKATE |
|---|---|
| Produces a meeting summary | Builds governed organizational memory |
| Sends a full transcript as context | Retrieves a bounded set of relevant evidence |
| Stores flat pages or informal backlinks | Maintains typed evidence and causal relationships |
| Centers a chat box | Operates as a workshop capture and synthesis system |
| Applies generic summarization | Follows a design-thinking path from evidence to action |
| Hides the source of an answer | Links outputs back to inspectable source notes |
| Ends with prose | Produces ranked pain points, How-Might-We prompts, solution starters, and Excel outputs |
| Loses follow-through in meeting notes | Surfaces captured actions in The Lineup and preserves their source-note link |
Obsidian is an excellent personal knowledge workspace. SKATE addresses a different job: helping facilitators and improvement teams convert a live, multi-person workshop into governed, reusable evidence and then deliberately synthesize that evidence into improvement opportunities.
The other category SKATE gets compared to is the meeting notetaker — Granola, Otter, Fireflies, Spinach. Fine products for personal use, but they record meetings; SKATE remembers engagements. The differences are structural, and they matter most in exactly the rooms where enterprise productivity tools get used — client engagements, HR conversations, legal and strategy sessions:
| SKATE | The notetaker category | |
|---|---|---|
| How it captures | Records what the PC hears — any meeting app, no bot joining the call | A visible bot joins the call, or capture routes through the vendor |
| Calendar and tenant access | None requested, ever | A Google/Microsoft calendar connection is commonly required for auto-join |
| Where your audio goes | Never leaves the machine — transcription is local | Vendor-cloud transcription and summarization |
| Vendor training on your content | Impossible: there is no vendor | Varies by vendor and plan; some train by default unless you opt out |
| What you get back | Governed, typed, linked memory plus a ranked design-thinking synthesis | A summary and an action list |
| Price | $0 — MIT-licensed, self-hosted | Per-user monthly SaaS |
Even the notetaker with the closest capture model still transcribes every recording in its own cloud. For confidential material, local-only processing is not a preference — it is the difference between a productivity tool and a data-governance decision. SKATE is the only option in the comparison that removes the vendor entirely.
flowchart LR
W["Workshop"] --> S["Spotter + physical HMI"]
S --> M["Markdown/YAML memory"]
M --> R["Lexical + optional semantic retrieval"]
R --> O["Provider layer: OpenAI, Anthropic, OpenRouter, LM Studio, or none"]
O --> G["LLM reasoning"]
G --> D["The GRIND"]
D --> X["Traceable ideas and exports"]
M --> P["Governed SKATE MCP server"]
P --> C["MCP-enabled agents and desktop clients"]
P -. "Authenticated HTTPS tunnel" .-> H["Hosted agent surfaces"]
The local vault remains the source of truth. Search indexes and embeddings are rebuildable acceleration layers, not proprietary memory. Cloud services are explicit and optional except when the user requests their capabilities.
SKATE is deliberately not locked to any AI vendor. Pick the reasoning engine that fits your privacy posture and budget in Settings:
| Provider | What it means |
|---|---|
| No AI | Every non-model feature still works: capture, governance, retrieval, graphs, The Lineup, exports, and a deterministic local synthesis. Nothing ever leaves the machine. |
| LM Studio | A local LLM on your own hardware through LM Studio's OpenAI-compatible server. Private reasoning, no API key. |
| OpenAI | GPT-5.6 family through the Responses API, with selectable reasoning effort. |
| Anthropic | Claude Sonnet, Opus, or Haiku through the Messages API. |
| OpenRouter | Any hosted model — Claude, GPT, Gemini, Llama, Mistral — with a single key. |
The same vendor-agnostic stance applies to agent access: the installer can register SKATE's MCP server with Codex/ChatGPT desktop and Claude Desktop in one click each.
The central AI task in SKATE is not "summarize this meeting." It is a constrained, evidence-heavy reasoning problem across multiple notes: recognize recurring tensions, distinguish observations from proposed solutions, preserve source traceability, reframe problems without embedding a preferred answer, and generate concrete starting points for experimentation.
The reasoning pipeline (implemented in ui/app.py, routed through the provider selected in Settings):
GRIND is the part of SKATE where workshop memory becomes forward motion. It reads the signals people captured in the room and follows a design-thinking progression:
flowchart LR
O["Observations and quotes"] --> P["Patterns and pain points"]
P --> H["How Might We prompts"]
H --> I["Solution starters"]
I --> E["Next experiments"]
GRIND reads whole notes, not just their openings — a pain point described three paragraphs into an unmarked note still reaches the synthesis, while explicitly marked signals continue to outrank inferred ones. When a session exceeds its context budget, evidence is selected by relevance rather than truncated: marked lines, keyword-scored paragraphs, and each note's opening and closing survive, with [...] marking elisions, and the whole payload stays bounded (~12K tokens) no matter how large the vault grows. GRIND respects note and session governance: inactive notes are retained in the vault but excluded from analysis, and inactive sessions do not appear as GRIND targets. Its outputs stay connected to evidence:
The 2D and 3D views make the same memory inspectable as a network of notes, themes, and typed rails. The graph is not the memory system itself; it is a lens for seeing relationships that are difficult to notice in a folder of documents.
SKATE's MCP server lets any MCP-enabled agent ask for the smallest useful slice of workshop memory rather than receiving an entire meeting transcript. Reads are governed and bounded; writes are deliberately narrow — an agent can add new notes and sessions with explicit agent provenance, but can never edit or delete existing memory, and write approval behavior depends on the MCP client’s permission settings. MCP is the interface; SKATE's governed Markdown, relationships, retrieval, and provenance remain the memory architecture behind it.
sequenceDiagram
participant C as MCP-enabled agent
participant M as SKATE MCP server
participant V as Local SKATE vault
C->>M: search_memory(query, session, top_k)
M->>V: hybrid retrieval + governance filter
V-->>M: bounded evidence with provenance
M-->>C: relevant notes and source links
C->>M: trace_evidence(memory_id)
M-->>C: supporting and conflicting context
Available tools:
| Tool | Purpose |
|---|---|
list_active_sessions | Show the workshop memories available to an agent |
search_memory | Return a small ranked evidence set for a query |
get_memory_object | Read a governed note in bounded pages; returns linked original sources |
get_memory_original | Read a linked unedited original in bounded pages; follows the parent note's access rules |
get_session_context | Retrieve a bounded overview of one session |
trace_evidence | Follow provenance and typed relationships |
get_grind_outputs | Retrieve the most recent design-thinking synthesis |
get_lineup | See open and landed Action Items and recurring Standard Work |
add_note | Add one new governed memory object with agent provenance (additive only) |
create_session | Create a new empty workshop session |
search / fetch | Compatibility tools for knowledge and research surfaces |
Configure SKATE MCP for Codex.bat / Configure SKATE MCP for Claude Desktop.bat from the installation folder, then restart the desktop client.Start SKATE.bat.Start SKATE MCP HTTP.bat, keep the endpoint private at http://127.0.0.1:8766/mcp, and connect it through an authenticated HTTPS tunnel. Never expose the unauthenticated local endpoint directly to the internet.
In skateboarding, the person attempting the trick is not entirely alone. A spotter watches the surrounding environment, looks out for approaching hazards, helps determine when the path is clear, and supports the skater without taking over the attempt. The role is an alert, trusted safety net operating just outside the spotlight.
SKATE's Spotter serves the same purpose in a workshop. The facilitator still leads the room and makes the judgment calls; Spotter listens at the edge of the session, preserves important signals, identifies risks and gaps, and helps the team move forward without replacing the human leading the work.
Spotter helps capture pains, observations, questions, actions, solutions, recommendations, and insights without forcing the facilitator to disengage from the room. Spotter Live can maintain a timestamped transcript with live transcription and speak responses aloud. Local Whisper keeps transcription on the machine, while optional ElevenLabs Scribe Realtime adds speaker diarization such as Speaker 1 and Speaker 2.
Choose Record a Meeting in the sidebar or on a session page. Spotter Live captures what the PC hears through WASAPI loopback, optionally mixed with the microphone. It works with sound from Teams, Zoom, Meet, Webex, or other apps, with no bot in the participant list and no calendar or tenant connection. Select an existing session or create one in the dropdown before starting.
Stopping saves both the WAV audio and a markdown transcript note in that session. The note links to its audio, and Spotter Live offers both links. WAV files live in the session's attachments folder and use about 115 MB per hour. Transcription runs on-device through faster-whisper; if it fails, the saved WAV remains available to download and retry.
In the desktop tray app, closing the window hides it while recording continues. The tray shows a skateboard when not recording and a red circle during capture. Hover for recording status or transcription progress. Right-click Stop recording & save to finish without reopening the window. Exit SKATE closes the application, so wait until audio and transcript are saved before exiting.
For an existing phone or field recording, import the audio/video file through the note editor. Imported files are processed temporarily; keep their originals separately. The PC recorder and imported-file transcription stay local. The separate Start listening room-caption feature uses the local or cloud engine selected in Settings and continues while you navigate within SKATE’s preserved live workspace. The Info tab includes a How to record & transcribe a meeting walkthrough.
After cleanup, agents can use get_memory_object to find original_sources, then get_memory_original with the note's memory_id and a linked source_id. Continue with next_offset until it is null to read long sources completely. Save the note first and restart the updated MCP server/client to load the new tool.
The Stream Deck turns facilitation methods into one-press stances: Observe, Find Waste, 5 Whys, How Might We, Frame, Test, Start, and Stop. The facilitator can change the agent's mode without breaking eye contact or navigating a menu. Custom icons and the hotkey map are in streamdeck-neo-icons/.
The custom 3D-printed skateboard-wheel housing holds a conference microphone array at the center of the table. It gives the otherwise invisible agent a memorable, understandable place in the workshop. Build files and the hardware guide are in hardware-spotter-mic-puck/.
Every performance number in this README reproduces from a harness committed to the repository:
python tools/benchmark_retrieval.py # retrieval quality, chance baselines, exact CI
python tools/benchmark_retrieval.py --scale # payload vs. vault size
top_k, not by corpus size.tests/test_synthesis_payload.py).Limitations, stated plainly: n = 10 author-labelled queries (no public benchmark exists for workshop-note retrieval); the scale sweep bounds payload, not ranking quality; token counts use SKATE's own chars÷4 estimator. The harness prints the same caveats it was built under.
The repository includes fictional nonprofit workshop material for Harborlight. It demonstrates the product without exposing client or personal data.
A judge can follow this story:
#O observation, #P pain, #Q question, and #A action.#A actions as traceable checklist items.python tools/benchmark_retrieval.py.Requirements: Windows. Python itself is optional — Start SKATE.bat finds a compatible installed Python (3.10+) or bootstraps a private CPython automatically via tools/bootstrap-python.ps1, with no admin rights required.
git clone https://github.com/SixSigmaEngineer/skate-workshop-os.git
cd skate-workshop-os
Then double-click Start SKATE.bat. On first run it creates a private .venv, installs the required packages, starts the local service, and opens the SKATE native app window. Use Stop SKATE.bat to stop the local service.
For the desktop tray behavior, close that instance after setup and launch Start SKATE.pyw. The .bat launcher runs without a tray icon, so its window must stay open during recording.
Open Settings and choose an AI provider — OpenAI, Anthropic, OpenRouter, a local LM Studio server, or No AI for a fully offline experience. An OpenAI key additionally powers live transcription and spoken agent responses; an ElevenLabs key is optional and only needed for speaker diarization. For fully local transcription, run Install Local Whisper.bat once and restart SKATE.
py -3.13 -m venv .venv
.venv\Scripts\python -m pip install -r ui\requirements.txt
.venv\Scripts\python ui\app.py
The local service binds to 127.0.0.1:8765. Add --reload for development or --browser only when you intentionally want the browser version.
Run Build Installer.bat to package the current source as 1.2.0. It produces build\installer\SKATE-Setup.exe. The installer retains SKATE's application identity so it can update an existing installation in place; uninstalling first is normally unnecessary. Finish and save any recording, then exit SKATE before running the installer. Existing notes and settings stay in the user's vault. Installer upgrade and real-device recording checks are still part of the ongoing 1.2.0 testing.
| Capability | Requirement |
|---|---|
| GRIND and Spotter reasoning | OpenAI, Anthropic, or OpenRouter API key — or LM Studio locally, or none |
| Local audio/video transcription | Included: faster-whisper ships with the app (models download on first use); classic openai-whisper remains an option via Install Local Whisper.bat |
| Live transcript and spoken Spotter responses | OpenAI API key (realtime voice models) |
| Optional realtime speaker diarization | ElevenLabs API key and Scribe Realtime |
| Local semantic retrieval | FastEmbed or Ollama with nomic-embed-text |
| Basic retrieval and manual notes | No cloud service required |
127.0.0.1, not a public network interface by default.settings.json, private conversations, transcripts, logs, and local model artifacts are excluded through .gitignore.| Layer | Technology |
|---|---|
| Application | Python, FastAPI, Jinja2, pywebview |
| AI reasoning | Selectable: OpenAI (Responses API), Anthropic (Messages API), OpenRouter, local LM Studio, or none |
| Memory | Markdown, YAML frontmatter, typed relationships |
| Retrieval | Weighted lexical scoring, optional FastEmbed or Ollama embeddings |
| Speech | OpenAI realtime transcription and voice; Local Whisper fallback; optional ElevenLabs diarization |
| Meeting capture | WASAPI system-audio loopback (soundcard) mixed with the microphone; on-device faster-whisper transcription |
| Visualization | Canvas knowledge graph with 2D/3D views; interactive Three.js board on Info |
| Export | Excel workshop synthesis; note/session Print / Save PDF |
| Physical HMI | Elgato Stream Deck Neo and custom microphone housing |
| Agent access | Official MCP Python SDK; STDIO and Streamable HTTP |
skate-workshop-os/
|-- ui/ application, routes, templates, and static assets
|-- demo-vault/ fictional Harborlight demonstration material
|-- workshop-knowledge-documents/ facilitation and methodology corpus (user-supplied)
|-- streamdeck-neo-icons/ physical-control icons and hotkey map
|-- hardware-spotter-mic-puck/ microphone enclosure files and build guide
|-- mcp_server/ governed MCP tools and transports
|-- tests/ automated test suite
|-- tools/ project utilities
|-- Start SKATE.bat one-click Windows launcher
|-- Stop SKATE.bat local-service stop command
|-- TECH_STACK.md deeper implementation notes
`-- LICENSE MIT license
The maintainer's local Push SKATE to GitHub.bat stages eligible files, creates a commit, and pushes main to SixSigmaEngineer/skate-workshop-os. Review git status --short first, then double-click the batch file or pass a commit message from a terminal. The batch file stays local and is intentionally ignored by Git.
Source, tests, documentation, and generated badge/winner artwork are included. Local settings, credentials, recordings, original-note attachments, caches, and private vault data must stay excluded. A source push does not rebuild or publish an installer: run Build Installer.bat, test the resulting installer, and publish the executable separately when ready.
Thank you to the dev team for building the ramps and helping SKATE land each new idea. Founding testers Brian Khorshad and Joe Wise took the early runs, found the rough spots, and helped make the next ride better. Their credits are part of the app, independent of any user's vault.
SKATE is available under the MIT License. Hardware components and third-party services remain subject to their respective licenses and terms.
SKATE turns conversations into memory, memory into evidence, and evidence into better ideas.

Skatetocat © GitHub, from the Octodex
Python
53.1%
HTML
31.7%
CSS
6.0%
JavaScript
5.4%
PowerShell
2.2%
Batchfile
1.5%