Skip to main content

Guide

Note Taking App for Developers: Markdown, MCP and Notes Checked Against Your Code

Developer notes fail in a specific way: they are right on the day they are written and quietly wrong six months later. This page says which tool fits which developer, what belongs in the repo instead, and a setup where notes are Markdown, your coding agent can read and write them over MCP, and runbooks get checked against the actual code.

Updated 2026-10-27

5 examples

Workflows that fit how you work

Concrete setups for the situations this kind of work keeps producing.

1.On-call engineer whose runbook was wrong at 2 a.m.

When it fits: Use this when your team keeps runbooks in notes, the code moves every sprint, and the last incident went sideways because a documented command no longer existed.

Farah, backend engineer, on call one week in five. During an October incident the runbook said make replay-dlq. The target had been renamed three months earlier.

Setup. Each runbook is a note from the runbook template with two extra fields at the top:

# Runbook: replay dead-letter queue
Last verified: 2026-10-21 by Farah
Breaks if: Makefile targets or the consumer CLI change

## Steps
1. `make dlq-replay TOPIC=orders` (expect "replayed N messages")

The team's repository is connected through the GitHub connector, and this note opts in to verification from its Settings. Background verification compares the commands in the note against the code and proposes a diff when they disagree, which she accepts or dismisses. The rename would have shown up as a suggested fix weeks before the incident.

2.Staff engineer whose decisions keep being relitigated

When it fits: Use this when the same architecture argument comes back every quarter and nobody can find why the last one ended the way it did.

Ines, staff engineer on a payments team. Third discussion this year about moving webhooks off the main API. Every time, the reasons from the last discussion were in a Slack thread nobody could find.

Setup. One running note from the decision log template, one entry per decision, always with a "because" and a review date:

## 2026-10-14: Keep webhooks in the API process
Because: p99 is 40 ms, separate service adds a deploy and a queue
Disagreed: Omar (wants isolation for retries)
Revisit: 2027-01-15 or if p99 > 200 ms

Before any refactor, she asks Claude Code to search her Scribelet notes for "webhooks" and list each decision with its date. The agent reads the log over MCP and flags where the code no longer matches. The fourth argument took ten minutes.

3.Freelancer with three client codebases and one coding agent

When it fits: Use this when you work across several clients, each with its own conventions, and you must not leak one client's context into another's session.

Dev, contract full-stack developer. Three clients: a Rails shop, a Next.js startup and a Django agency project. Each has deploy steps, credentials locations and quirks he forgets between visits.

Setup. One desk per client. Each desk holds a Client handbook note (stack, deploy, who approves what), a running debug log and the decisions he made for them. When Claude Code connects to the Scribelet MCP server, the OAuth consent screen asks which desks the agent may use, and he grants only the client he is working for that week. Switching clients means switching the connection, not hoping the agent ignores the wrong notes. At the end of a contract he exports the notes to Markdown and hands the client's handbook over with the code.

4.Junior developer building a second brain from debugging sessions

When it fits: Use this when you solve the same class of problem twice a month and cannot remember how you fixed it last time.

Sana, eight months into her first job. CORS errors, a flaky test that depends on timezone, Docker running out of disk. Each fix took an afternoon. Each came back.

Setup. A note per problem, titled by the symptom, not the cause, because the symptom is what she will search for:

# Jest test fails only after 7 p.m.
Cause: test builds "today" with toISOString(), which is UTC
Fix: use a local-date helper
Seen in: [[Billing service]], [[Reports service]]
#til #testing

Wikilinks to each service mean the service note's backlinks panel lists every gotcha it has. Three months later she asked the AI chat "why do date tests fail in the evening" and got her own note back, with a link to it.

5.Team lead deciding what goes in notes and what goes in the repo

When it fits: Use this when your team argues about whether documentation belongs in a wiki, a notes app or the repository.

Paul, lead of a six-person platform team. Docs were split across a wiki, READMEs and personal notes, and nobody trusted any of them.

Recommendation. Anything the code depends on, or that must be reviewed with a change, goes in the repo: READMEs, ADRs, API docs, the deploy guide. That is docs as code, and a notes app should not replace it. Notes are for what comes before and around the code: investigations, meeting decisions not yet written up as ADRs, personal runbooks under construction, on-call logs. When a note becomes stable and shared, it graduates into the repo as a pull request. With Scribelet Team, the platform team shares one desk for the pre-repo material; each engineer keeps a personal desk for the rest.

Which tool fits which developer

  • You live in your editor and want nothing else. A notes/ folder of Markdown files in a private git repo. Free, greppable, versioned. No mobile capture worth the name, and nothing reminds you a note is out of date.
  • You want local-first Markdown on disk. Obsidian (free for personal use, sync is paid) or Joplin (open source, sync through your own server or a cloud drive). Strong plugin ecosystems; agent access means running a local MCP server yourself.
  • Your team wants a shared wiki with databases. Notion. Good for team pages and project tracking. Not Markdown on disk.
  • You want collaborative Markdown documents. HackMD, which is built for writing Markdown together in the browser.
  • You want Markdown notes your coding agent can read and write, checked against your code. Scribelet. Hosted MCP server with OAuth per desk, a GitHub connector so verification can compare notes with the repository, and AI chat with citations over your notes. Web and iOS. It is not an IDE plugin and does not replace docs in the repo.

The three problems developers have with notes

Context lives in heads and chat threads. Why the retry limit is 5, what the vendor said about rate limits, which flag is safe to delete. It was said once in Slack and is gone. A decision log with one line of "because" per entry solves most of this.

Docs are right on the day they are written. Code changes every sprint; the runbook does not. Nobody notices until the 2 a.m. incident. The fix is a verification date on every operational note, and something that compares the note with the code before a human has to.

Every agent session starts from zero. You re-explain the deploy process, the naming conventions and last week's decision to Claude Code every morning. If the agent can search your notes over MCP, you write it down once.

The setup (one hour)

  1. One desk per codebase or client. Desks are the unit of agent access, so the boundary matters.
  2. Four note types. Runbooks, a decision log, debug logs for long investigations, and one note per service that mostly exists to collect backlinks. Start from the runbook and decision log templates.
  3. Connect your agent. Run the claude mcp add command above, approve one desk, keep read-only scopes for the first week.
  4. Connect the repository, and opt in the notes whose claims depend on code: runbooks, setup guides, architecture notes.

The weekly routine (20 minutes, Friday)

  • Five minutes: read the debug logs from the week. Write the conclusion at the top of each, and turn anything reusable into its own symptom-titled note.
  • Five minutes: add the week's decisions to the decision log, with a "because" and a revisit date.
  • Five minutes: review verification suggestions and stale-note flags. Accept, dismiss or update.
  • Five minutes: pick one stable note and move it into the repo as a pull request, if it has earned it.

What should never be in notes

Secrets. API keys, passwords and connection strings belong in a secrets manager, not a notes app, encrypted or not. Write where the secret lives (prod DB password: 1Password, vault "Platform"), never the value. The same applies to anything your agent can read: if it is in a desk you granted, assume it will appear in a prompt.

Setup tips

  • Title notes by symptom or question

    Jest fails after 7 p.m. finds itself; Timezone handling does not. You search for what you see, not what you later learned the cause was.

  • Put a verification date on anything operational

    Runbooks, setup guides and deploy notes get Last verified: YYYY-MM-DD at the top. A note without a date is a note nobody knows whether to trust.

  • Start agents on read-only scopes

    The default OAuth grant to the MCP server is read access. Use it for a week before granting write access, so you learn what the agent actually looks up before you let it create notes.

  • Keep a debug log per long investigation

    Timestamped bullets as you go (14:32 not the Kafka config, same failure with defaults). The conclusion goes at the top when you are done. Next time, the log tells you what you already ruled out.

  • Link to services, not folders

    A [[Billing service]] note with no content except a one-line description becomes useful through its backlinks: every incident, decision and gotcha that mentions it.

In the app

How to do this in Scribelet

  1. Notes are Markdown with #tags and [[wikilinks]]. Import an existing Obsidian vault, and export everything back to Markdown at any time.

  2. Connect Claude Code with claude mcp add scribelet --transport streamable-http https://api.scribelet.app/mcp. For Cursor, add {"mcpServers": {"scribelet": {"url": "https://api.scribelet.app/mcp"}}} to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global), then turn the server on from Cursor's Customize page. Approve the desks the agent may use on the OAuth consent screen. See Claude Code + Scribelet and Cursor + Scribelet.

  3. Connect a repository with the GitHub connector (a GitHub App with read-only code search), then opt a runbook or design note in from its Settings so verification checks it against the code.

  4. Background verification proposes diffs you accept or dismiss when a note's claims disagree with the repository or the web. It is a Pro feature, along with the stale checker that flags notes due for review.

  5. Write follow-ups as - [ ] Remove feature flag @due(2026-11-20). The Tasks view lists them across every note.

  6. Ask the AI chat "what did we decide about webhook retries?" and get the answer with citations to your own notes.

Start with the quick start if you are new to Scribelet.

Frequently asked questions

What is the best note-taking app for developers?

Depends on where you want the files. Plain Markdown in a git repo if you live in your editor. Obsidian or Joplin if you want local-first Markdown on disk. Notion if your team wants databases and a shared wiki. Scribelet if you want Markdown notes that your coding agent can read and write over MCP and that get checked against your repository. Check current pricing on each vendor's page.

Should developer notes live in the repository or a notes app?

Both, for different things. Anything that must change together with the code (READMEs, ADRs, API docs) belongs in the repo; see docs as code. Investigations, debug logs, meeting decisions and personal runbooks are notes until they stabilize, then they graduate into the repo.

What is a second brain for developers?

In practice, three things: notes titled by the problem you will search for, links from each note to the services it touches, and a way to ask questions across all of it. PKM for developers is less about method and more about making sure the fix you found in March is findable in October.

Can Claude Code or Cursor read my notes?

With an MCP server, yes. Scribelet runs a hosted one at https://api.scribelet.app/mcp using OAuth 2.1 or an API token. The agent can search, read, create and update notes and memories in the desks you approve. The Claude Code integration page has the exact steps.

How do I stop runbooks going stale?

Give each one a last-verified date and a line saying what change would break it, then check them on a schedule. Scribelet's GitHub connector lets verification compare a note against your actual code and propose fixes. The runbook template includes both fields.

Give your coding agent the notes it keeps asking for

Create a desk for your main codebase, add your runbooks and decision log, and connect Claude Code with one command or Cursor with one config file. Tomorrow's session starts with the context already written down.

Free plan, no credit card. See pricing

Integration

Claude Code + Scribelet: Give Your Coding Agent a Notes MCP Server

Scribelet exposes a hosted MCP server at `https://api.scribelet.app/mcp`. One `claude mcp add` command, an OAuth consent screen where you pick the desks, and Claude Code can search your notes, follow their links, read your memories and write new notes. Nothing to run locally.

Engineering

Runbook Template

A runbook is the page someone follows at 3 a.m. with no context. This template gives every step a literal command and the output to expect, and adds the two fields most templates skip: when the procedure was last verified, and what change would make it wrong.

Work

Decision Log Template

A decision log is a running record of what was decided, why, by whom, and what you expected to happen. This template adds the two fields most logs leave out: who disagreed, and a date to check whether the decision worked. Copy it for a team, or use the decision journal example for your own choices.

Engineering

Post Mortem Template for Incidents

A post-mortem is worth writing only if it changes something. This template keeps the timeline factual, pushes the whys to a cause the team can fix, and ends with action items that have owners, dates and a 30-day check. Copy it, or start from the postmortem example closest to your incident.

Article

Docs as code

From the Scribelet blog

Article

Agentic coding

From the Scribelet blog

We use cookies for analytics to improve your experience. Learn more