Skip to main content

Structured note system for AI-powered retrieval. Paste anything, AI organizes it.

Project description

 ███╗   ██╗ ██████╗ ████████╗███████╗██╗  ██╗   ██╗
 ████╗  ██║██╔═══██╗╚══██╔══╝██╔════╝██║  ╚██╗ ██╔╝
 ██╔██╗ ██║██║   ██║   ██║   █████╗  ██║   ╚████╔╝
 ██║╚██╗██║██║   ██║   ██║   ██╔══╝  ██║    ╚██╔╝
 ██║ ╚████║╚██████╔╝   ██║   ███████╗███████╗██║
 ╚═╝  ╚═══╝ ╚═════╝    ╚═╝   ╚══════╝╚══════╝╚═╝
 A notes system that works for you and your AI.

PyPI License: MIT Python 3.10+ Tests

Paste your meeting notes, Slack threads, or quick thoughts. AI organizes them into searchable markdown files. You never have to sort, tag, or file anything yourself.

You paste this:                          You get this:

  hey just got off the call with          notes/clients/acme/2026-03-05_acme-kickoff.md
  Jake from Acme. they want to            ---
  launch by Q3, need us to scope          title: Acme Kickoff Call
  the API integration first.              summary: Acme wants Q3 launch, API integration
  Jake will send the spec by                scoping needed first.
  Friday. budget is 50k.                  tags: [kickoff, api, acme]
                                          participants: [Jake]
                                          action_items:
                                            - task: Send API spec
                                              owner: Jake
                                              due: 2026-03-07
                                          ---
                                          Full structured notes here...

Notely handles the rest: duplicate detection (won't save the same paste twice), folder routing (figures out where it goes), action item extraction, and full-text + semantic search across everything.

Quick Start

pip install notely

# Verify it installed
notely --help

# Pick any folder — this is where your notes will live
mkdir my-notes && cd my-notes

# Interactive setup — asks for your API key and designs your filing system
notely init

# Start capturing
notely open

Notely uses the Anthropic API (Claude) to structure your notes. notely init will ask for your API key if you don't have one — get it at console.anthropic.com.

notely command not found? Try python -m notely --help. If that works, your Python scripts directory isn't in your PATH. Run pip show notely to find where it's installed.

What notely init does

notely init is an interactive wizard. You describe your work, and the AI creates a folder structure that fits:

$ notely init

  What kind of notes will you be taking?
  > I manage 3 client accounts and have personal stuff too

  Creating workspace...

  my-notes/
  ├── config.toml
  └── notes/
      ├── clients/
      │   ├── acme/
      │   └── globex/
      └── personal/

You can always add folders later with /mkdir inside notely open, or let the AI create new folders automatically as your notes come in.

After init, run notely open to start an interactive session. Paste anything — meeting notes, Slack threads, quick thoughts. The AI structures it and files it in the right folder as a clean markdown file.

What It Looks Like

Capturing notes

notely-notetaker> [paste your meeting notes, Slack thread, anything]

  Preview
  ──────────────────────────────────────
  Acme Kickoff Call
  Acme wants Q3 launch, API integration scoping needed first.
  tags: kickoff, api, acme
  participants: Jake

  Action items:
    [ ] Send API spec — Jake, due Fri
  ──────────────────────────────────────

  [Y]es, save / [e]dit first / [n]o, skip: y
  Saved: clients/acme/2026-03-05_acme-kickoff.md

Managing todos

notely-notetaker> /todo

  ★ Today
  ─────────────────────────────────────
    1. Deploy v2 to staging              Chloe · due today
    2. Fix auth bug                      Chloe · due Fri

  Acme
  ─────────────────────────────────────
    3. Send API spec                     Jake · due Fri
    4. Review SOW                        Chloe · due Mon

  4 open — done · add · today · due · timer · q

Searching

notely search "API integration"

  1. Acme Kickoff Call (2026-03-05) [clients/acme]
     Acme wants Q3 launch, API integration scoping needed first.

  2. Platform Architecture (2026-02-28) [projects/vault]
     REST API design decisions for the Vault project.

Chatting with your notes

notely-notetaker> /chat acme

notely-chat (Acme)> what are the open items for Acme?

  Based on your notes, here are the open items:
  1. Jake needs to send the API spec (due Friday)
  2. SOW review is pending (due Monday)
  3. No timeline set for scoping yet

How It Works

flowchart TD
    A["You paste raw text"] --> B{"AI classifies it<br/>and files it"}
    B -->|"Structured content"| C["Full note<br/>(title, summary, tags,<br/>action items)"]
    B -->|"Quick task or idea"| D["Todo or Idea<br/>(one-liner, due date)"]
    B -->|"Reference data"| E["Snippet<br/>(account number, NPI, URL)"]
    C --> F{"Duplicate?"}
    F -->|"Match found"| G["Merge into<br/>existing note"]
    F -->|"No match"| H["Route to folder"]
    G --> I["Saved as Markdown"]
    H --> I
    D --> I
    E --> J["Saved to index"]
    I --> K["Indexed + searchable"]
    J --> K

    style B fill:#e3f2fd,stroke:#1976d2
    style I fill:#d4edda,stroke:#28a745,stroke-width:2px

The AI decides what your input is and files it in the right place — you never have to. Meeting notes become structured notes with action items, filed into the right client folder. "Call dentist Friday" becomes a todo. An account number becomes a searchable reference snippet. Duplicates are caught automatically before anything is saved.

Markdown files are the source of truth. Everything else (search index, vectors, CSV exports) is derived and can be rebuilt with notely reindex. You can edit your notes by hand in any text editor — notely respects your changes.

Data Architecture

flowchart LR
    subgraph Source of Truth
        MD["Markdown files<br/>notes/**/*.md"]
    end
    subgraph Derived - rebuildable
        DB["SQLite + FTS5<br/>index.db"]
        VEC["LanceDB<br/>.vectors/"]
        CSV["CSV exports<br/>_todos.csv"]
    end

    MD --> DB --> VEC
    DB --> CSV

    style MD fill:#d4edda,stroke:#28a745,stroke-width:2px
    style DB fill:#fff3cd,stroke:#ffc107
    style VEC fill:#fff3cd,stroke:#ffc107
    style CSV fill:#fff3cd,stroke:#ffc107

Two Ways to Use It

CLI (default)

Uses the Anthropic API to structure your notes. Requires an API key.

notely open          # Interactive session
notely dump < file   # One-shot: pipe text in, get structured note out

MCP Server (Claude Desktop / Claude Max)

Claude becomes the AI — no API calls, no cost. Add to your Claude Desktop config:

{
  "mcpServers": {
    "notely": {
      "command": "python",
      "args": ["-m", "notely.mcp_server"],
      "cwd": "/path/to/your/workspace"
    }
  }
}

Both paths produce the same markdown files and search index.

Commands

Command What it does
notely open Interactive session — paste notes, drag files, slash commands
notely dump One-shot: pipe text in, AI structures, save
notely search <query> Full-text search across all notes
notely todo View and manage action items
notely list List recent notes
notely show <id> Display a full note
notely edit <id> Open in your editor, re-indexes on save
notely init Set up a new workspace
notely reindex Rebuild search index from markdown files

Inside notely open

Command What it does
/todo Interactive todo mode — mark done, add tasks, flag for today, start timers
/chat <folder> AI chat scoped to a folder's notes
/timer <folder> <desc> Time tracking
/clip <url> Save a web page as a note
/ref View/search reference data (account numbers, NPIs, etc.)
/folder <name> Set a working folder for the session
/edit <id> Edit a note in your editor

Key Features

Smart classification — The AI decides what your input is. Paste meeting notes and it creates a structured note with title, summary, tags, and action items. Type "call dentist Friday" and it creates a todo. Paste an account number or NPI and it stores a searchable reference snippet. You never have to tell it which type — it figures it out.

Duplicate detection — Three layers: exact hash, snippet hash, and semantic search. Notely won't let you save the same meeting notes twice. If it finds a match, it offers to merge the new information in.

Secret masking — Wrap sensitive data in |||secret||| markers. Before any text is sent to the AI, those values are replaced with [REDACTED]. The actual values are stored locally in .secrets.toml (gitignored) and restored in the saved note. Your API keys, passwords, and credentials never leave your machine.

You paste:   Login: admin  Password: |||s3cret_pass|||
AI sees:     Login: admin  Password: [REDACTED]
Saved note:  Login: admin  Password: s3cret_pass

Folder routing — AI figures out where each note belongs based on your workspace structure. At any routing prompt, you can type a folder path directly (e.g. clients/acme) instead of picking a number — notely resolves it or creates the folder on the spot.

Action item extraction — AI pulls out tasks, assigns owners, parses due dates. View them all with /todo.

Web clipping/clip <url> saves any web page as a structured note. Requires the optional Firecrawl dependency (pip install "notely[web]") and a Firecrawl API key.

File attachments — Drag or paste file paths. Supports text, PDF (with table extraction), and images (described via Vision API).

Customizable AI prompts — Override how notely classifies, structures, and merges notes by placing template files in your workspace's templates/ directory. See Customizing AI Prompts for details.

Workspace Structure

After running notely init, your workspace looks like:

my-workspace/
├── config.toml         # Your spaces and settings
├── notes/              # Markdown files (source of truth)
│   ├── clients/
│   │   └── acme/       # One folder per client/project
│   └── personal/
├── index.db            # Search index (auto-generated)
├── _todos.csv          # Todo list (auto-generated)
└── .env                # Your API key (gitignored)

Spaces are top-level categories (clients, projects, personal). Groups are folders within a space (one per client, project, etc.). Define them in config.toml or let notely init set them up interactively.

Contributing

See CONTRIBUTING.md for setup, testing, and PR guidelines. See docs/ARCHITECTURE.md for the pipeline, data model, and how to extend notely.

# Developer setup
pip install -e ".[dev]"
python -m pytest tests/ -v    # 108 tests

License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

notely-0.1.1.tar.gz (150.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

notely-0.1.1-py3-none-any.whl (158.9 kB view details)

Uploaded Python 3

File details

Details for the file notely-0.1.1.tar.gz.

File metadata

  • Download URL: notely-0.1.1.tar.gz
  • Upload date:
  • Size: 150.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.17

File hashes

Hashes for notely-0.1.1.tar.gz
Algorithm Hash digest
SHA256 359dffc1731d279c2b9e5451b934cc1f1dd0e74f1a922ea12b4cc424b62b728e
MD5 56c16a6e01051071433b16ce876710a5
BLAKE2b-256 d209efa26b0e96e82730c6b1afd9d2968d650ff421b5845e0b5550e91b835adf

See more details on using hashes here.

File details

Details for the file notely-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: notely-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 158.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.17

File hashes

Hashes for notely-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d619c3d806b568b3163500f5f68b52ff5b4d4797f10063f97d62fd7eb0f98f89
MD5 3f424ed1ef5c7afd787124bf54bac9d9
BLAKE2b-256 ec5d82845949913954819bed4f8e35aa55a5c69959531b2a87bea01153c12b9b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page