Graincrawl logo

Graincrawl

Community
vincentkoc
graincrawl

Maintain, verify, and release graincrawl, the local-first Granola archive CLI, including SQLite archive behavior, read-only Granola source boundaries, Homebrew tap packaging, and crawlkit-powered TUI/snapshot surfaces.

Overview

Publishervincentkoc
Repositorydotskills
Skill namegraincrawl
Stars
112
Forks
9
Bundled files
2
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 2 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by vincentkoc on GitHub. Read the source before you install it.

Installation

Install the Graincrawl AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/vincentkoc/dotskills/tree/main/skills/graincrawl
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/vincentkoc/dotskills.git /tmp/dotskills
mkdir -p .claude/skills
cp -r /tmp/dotskills/skills/graincrawl .claude/skills/graincrawl
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Graincrawl in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Graincrawl on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Graincrawl is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Graincrawl

Purpose

Maintain graincrawl, the Go CLI that archives Granola notes, transcripts, panels, people, workspaces, and sync metadata into a private local SQLite store. Keep it read-only against Granola, SQLite-first for browsing/export, and aligned with the other crawl apps.

When to use

  • Editing or reviewing a graincrawl checkout.
  • Investigating Granola source adapters: private-api, desktop-cache, encrypted-json, opfs, public-api, or companion-cli.
  • Verifying note, transcript, panel, source object, search, Markdown export, or TUI behavior.
  • Preparing a graincrawl release, Homebrew formula, or local binary refresh.
  • Checking crawlkit control metadata, snapshots, or TUI integration from the app side.

Workflow

  1. Locate the graincrawl checkout from the current repository, an explicit user path, or the configured workspace root. Read repo-local AGENTS.md, README.md, SPEC.md, and docs/security.md before release, source-adapter, or unlock work.

  2. Keep Granola boundaries explicit. Ordinary doctor, status, notes, export, and tui commands must not prompt Keychain, unwrap safeStorage, or mutate Granola profile files.

  3. Use temp HOME, temp XDG dirs, temp config, and temp SQLite databases for tests and smoke checks. Do not mutate live ~/.config/graincrawl archives or Granola app data unless the user explicitly asks.

  4. Prefer archived SQLite reads for UI/export behavior. If Markdown export has the data, TUI detail should read that same archived source, not re-query Granola.

  5. Run the normal local gate with workspace masking disabled:

    bash
    GOWORK=off go mod tidy
    git diff --exit-code -- go.mod go.sum
    GOWORK=off go vet ./...
    GOWORK=off go test -count=1 ./...
    make smoke
    goreleaser check
  6. For release work, use semver tags and verify the tap path:

    bash
    git tag -a v0.1.0 -m "graincrawl v0.1.0"
    git push origin main v0.1.0
    HOMEBREW_NO_AUTO_UPDATE=1 brew install --build-from-source vincentkoc/tap/graincrawl
    HOMEBREW_NO_AUTO_UPDATE=1 brew test vincentkoc/tap/graincrawl
  7. After app changes, refresh the local binary when requested or when handing off a testable CLI:

    bash
    GOWORK=off go build -trimpath -o ~/.local/bin/graincrawl ./cmd/graincrawl
    graincrawl version --json

Inputs

  • Target task: app edit, source-adapter investigation, local archive/TUI fix, release verification, tap update, or binary refresh.
  • Optional version tag such as v0.1.0.
  • Optional temp fixture paths or a copied Granola profile for encrypted/OPFS investigation.

Outputs

  • A focused graincrawl change or readiness report.
  • Validation commands and results.
  • Explicit notes about any private API, Keychain, safeStorage, OPFS, or live profile boundary crossed.
  • Tap/release status and local binary path when release or install work is in scope.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Graincrawl AI skill do?

Maintain, verify, and release graincrawl, the local-first Granola archive CLI, including SQLite archive behavior, read-only Granola source boundaries, Homebrew tap packaging, and crawlkit-powered TUI/snapshot surfaces.

Why use Graincrawl on TypingMind?

Because you install it once and use it with any model. Graincrawl is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Graincrawl in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/vincentkoc/dotskills/tree/main/skills/graincrawl. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Graincrawl?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Graincrawl?

As many as you like. As long as a model supports skills, you can use Graincrawl with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Graincrawl AI skill free?

Yes. It is published on GitHub by vincentkoc under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇