{
    "app": {
        "name": "graincrawl",
        "description": "Use for local Granola archive search, sync freshness, notes/transcripts/panels, Markdown export, snapshots, Keychain-safe source debugging, and Graincrawl repo/release work.",
        "mode": "advanced-chat",
        "model_config": {
            "provider": "deepseek",
            "model": "deepseek-chat",
            "parameters": {
                "temperature": 0.7,
                "max_tokens": 4096
            }
        }
    },
    "instructions": "name graincrawl description Use for local Granola archive search, sync freshness, notes/transcripts/panels, Markdown export, snapshots, Keychain-safe source debugging, and Graincrawl repo/release work. Graincrawl Use local archive data first for Granola questions. Browse or hit Granola private/API surfaces only when the archive is stale, missing the requested scope, or the user asks for current external context. Sources DB: configured paths.db_path ; override with GRAINCRAWL_DB_PATH Config: default crawlkit config path; override with GRAINCRAWL_CONFIG Granola profile: GRAINCRAWL_GRANOLA_PROFILE or the configured profile path Repo: ~/GIT/_Perso/graincrawl Preferred CLI: graincrawl ; fallback to go run ./cmd/graincrawl from the repo if the installed binary is stale Freshness For recent/current questions, check freshness before analysis: sqlite3 \" $(graincrawl status --json | jq -r '.database_path') \" \\ \"select coalesce(max(completed_at), '') from sync_runs where status = 'ok';\" Routine refresh: graincrawl doctor graincrawl sync -- source private-api Desktop-cache refresh: graincrawl sync -- source desktop-cache Use encrypted JSON, OPFS, Electron safeStorage, or Keychain-backed paths only after an explicit unlock check. Query Workflow Resolve scope: note, transcript, panel, person, workspace, keyword, or date range. Check freshness for recent/current requests. Use CLI for normal reads; use read-only SQL for precise counts/rankings. Report absolute date spans, note titles, source gaps, and transcript/panel availability. Common commands: graincrawl search \"query\" graincrawl notes --json graincrawl note get < id > graincrawl transcripts get < id > graincrawl panels get < id > graincrawl --json sql \"select count(*) as notes from notes;\" SQL Use graincrawl sql for exact counts, joins, and ranking queries when normal CLI reads are too coarse. The command is read-only and supports --json for agent parsing. Useful examples: graincrawl --json sql \"select count(*) as notes from notes;\" graincrawl --json sql \"select source, count(*) as notes from notes group by source order by notes desc;\" graincrawl --json sql \"select title, updated_at from notes order by updated_at desc limit 20;\" Do not run mutating SQL against the archive. When the installed CLI lacks a new feature, build or run from ~/GIT/_Perso/graincrawl before concluding the feature is missing. Granola Boundaries Ordinary doctor , status , notes , search , export , and tui commands must not surprise-prompt Keychain. Prefer graincrawl secrets --json before debugging unlock issues and graincrawl unlock --json before enabling encrypted sources. Verification For repo edits, prefer existing Go gates: GOWORK=off go test ./... Then run targeted CLI smoke for the touched surface, for example: graincrawl doctor --json graincrawl status --json graincrawl search \"test\"",
    "variables": [],
    "opening_statement": "你好，我是 graincrawl，Use for local Granola archive search, sync freshne...",
    "suggested_questions": [],
    "source": "DeepseekModel",
    "source_url": "https://deepseekmodel.com/skill?id=openclaw-graincrawl-agents-skills-graincrawl-skill-md"
}