Skip to content

Instantly share code, notes, and snippets.

View dpaola2's full-sized avatar

Dave Paola dpaola2

View GitHub Profile

WCP Inbox: Activity Awareness for Shared Namespaces

The problem

When someone creates or assigns a work item in a shared namespace, the other person has no way to know without leaving WCP (e.g., checking Slack). The signal should stay in the system.

How it works

  • Every WCP user gets a persistent inbox — a stream of activity from shared namespaces and assignments
  • Entries get delivered automatically on your next MCP tool call. Claude sees them and says something like: "Emerson created ATLAS-26 for you and commented on ATLAS-14. Want me to pull either up?"

Building a Personal OS with Obsidian + Claude Code + Custom MCP

The Pitch

I built a "Personal Operating System" -- an Obsidian vault that serves as a unified life management system with Claude (via Claude Code CLI) as the primary interface. It covers work, career, family, personal growth, side ventures, and even recipes.

The interesting parts:

  1. Claude is the primary interface, not Obsidian's GUI. The vault is designed to be read and written by an AI agent, with Obsidian as a secondary browsing layer.
  2. A project-level CLAUDE.md file teaches Claude the system's full conventions, folder structure, and linking rules -- every session.
@dpaola2
dpaola2 / vault-link-index-walkthrough.md
Created February 18, 2026 21:20
Walkthrough: Obsidian vault link index as an MCP server for Claude Code
@dpaola2
dpaola2 / database.ts
Created February 18, 2026 21:19
Obsidian vault link index — MCP server for Claude Code (TypeScript + SQLite)
import Database from "better-sqlite3";
import * as path from "path";
import { ParsedFile, ParsedLink, VaultParseResult } from "./parser.js";
export interface BacklinkResult {
from: string;
title: string | null;
lineNumber: number;
displayText: string | null;
}
@dpaola2
dpaola2 / daves-pairing-exercise.md
Created December 13, 2022 17:26
Dave's Pairing Exercise

Dave's Pairing Exercise

Hello and thanks for spending some time pairing with me! This exercise is an opportunity for us to try out working together and hopefully have some fun writing code!

  • This exercise is open ended and collaborative. There are no set goals or evaluation metrics.
  • We have 60 minutes together, and as that is not a lot of time, we should spend it wisely and make sure we make the most of it.
  • It's best to use the candidate's (your) machine, in their most comfortable environment/IDE, while sharing screen.
  • It's recommended to use the language/framework you are most familiar with, and choose a task that would be best in this language/framework (it's not the day for trying a new language :) )
  • Bonus points if you run rails new/npm install/composer create-project/etc beforehand so that we can get started a bit faster
ruby-2.6.8 - #removing src/ruby-2.6.8 - please wait
Searching for binary rubies, this might take some time.
No binary rubies available for: osx/13.0/x86_64/ruby-2.6.8.
Continuing with compilation. Please read 'rvm help mount' to get more information on binary rubies.
Checking requirements for osx.
Certificates bundle '/usr/local/etc/openssl@1.1/cert.pem' is already up to date.
Requirements installation successful.
Installing Ruby from source to: /Users/dave/.rvm/rubies/ruby-2.6.8, this may take a while depending on your cpu(s)...
ruby-2.6.8 - #downloading ruby-2.6.8, this may take a while depending on your connection...
ruby-2.6.8 - #extracting ruby-2.6.8 to /Users/dave/.rvm/src/ruby-2.6.8 - please wait
def javascript_to_elixir(js_code)
# Define a method that will convert JavaScript keywords to Elixir
define_method :convert_keyword do |keyword|
case keyword
when "function"
"def"
when "var"
"def"
when "let"
"def"
{
"_id": "1661312886559-1055787122967",
"coreID": "33304708393730393c001d00",
"locationID": "1654872368417-0895177245456",
"name": "WaterLeak",
"severity": 2,
"start": "2022-08-24T03:48:03.000Z",
"displayName": "Leak",
"details": {
"totalLiters": 24846.9575699462,
<html>
<body>
<script src="https://cdn.atomicfi.com/transact.js"></script>
<script>
Atomic.transact({
publicToken: "",
product: "deposit",
demoMode: true,
color: "#4B39EF",
onFinish: function(data) {},
@dpaola2
dpaola2 / Sidekiq Reset
Created January 6, 2021 18:51 — forked from unkleara/Sidekiq Reset
Sidekiq reset stats
To reset processed jobs:
Sidekiq.redis {|c| c.del('stat:processed') }
To reset failed jobs:
Sidekiq.redis {|c| c.del('stat:failed') }
To reset statistics:
Sidekiq::Stats.new.reset