anki-connect by intellectronica/agent-skills
npx skills add https://github.com/intellectronica/agent-skills --skill anki-connect通过 AnkiConnect 本地 HTTP API 实现与 Anki 的可靠交互。使用此技能可将用户请求转换为 AnkiConnect 操作,构建 JSON 请求,通过 curl/jq(或等效工具)运行它们,并安全地解释结果。
http://127.0.0.1:8765(默认)响应。使用 curl 验证就绪状态,例如 curl -sS http://127.0.0.1:8765 应返回 Anki-Connect。关键 — 绝无例外
在对笔记或卡片执行任何破坏性或修改性操作(添加、更新、删除、重新安排、暂停、取消暂停、更改牌组或更改字段/标签)之前,必须请求用户确认。如果可用,请使用 AskUserQuestion 工具;否则通过聊天询问。每个逻辑操作仅请求一次确认,即使它需要多个 API 调用(例如,搜索 + 更新 + 验证)。根据意图和范围(例如,“更新与查询 X 匹配的 125 条笔记”)对确认进行分组。
默认情况下,以下操作需要确认:
addNote、addNotes、updateNoteFields、、、、、、、、。广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
updateNoteTagsupdateNoteupdateNoteModeldeleteNotesremoveEmptyNotesreplaceTagsreplaceTagsInAllNotesclearUnusedTagssetEaseFactors、setSpecificValueOfCard、suspend、unsuspend、forgetCards、relearnCards、answerCards、setDueDate、changeDeck。每个请求都是 JSON 格式,包含:
action:字符串操作名称version:API 版本(除非用户另有指定,否则使用 6)params:参数对象(可选)每个响应都是 JSON 格式,包含:
result:返回值error:成功时为 null,或描述错误的字符串在使用 result 之前,始终检查 error。
requestPermission;这是唯一接受任何来源的操作。version 确保兼容性;当 version ≤ 4 时,旧版本可能在响应中省略 error 字段。优先使用 jq 构建 JSON 和解析响应。保持请求明确且结构化。
jq -n --arg action "deckNames" --argjson version 6 '{action:$action, version:$version}' \
| curl -sS http://127.0.0.1:8765 -X POST -H 'Content-Type: application/json' -d @-
jq -n \
--arg action "findNotes" \
--argjson version 6 \
--arg query "deck:French tag:verbs" \
'{action:$action, version:$version, params:{query:$query}}' \
| curl -sS http://127.0.0.1:8765 -X POST -H 'Content-Type: application/json' -d @-
curl -sS http://127.0.0.1:8765 -X POST -H 'Content-Type: application/json' -d @- \
| jq -e 'if .error then halt_error(1) else .result end'
使用 multi 来减少往返次数,并在修改数据时将多个操作分组在单个确认下。
jq -n --argjson version 6 --arg query "deck:French" \
'{action:"multi", version:$version, params:{actions:[
{action:"findNotes", params:{query:$query}},
{action:"notesInfo", params:{notes:[]}}
]}}' \
| curl -sS http://127.0.0.1:8765 -X POST -H 'Content-Type: application/json' -d @-
链接操作时,用前一个操作的结果替换空数组;在 CLI 使用中,除非使用脚本语言,否则拆分为两个调用。
requestPermission(安全)。version 以确认 API 级别,并在请求中使用 version: 6。scopes: ["actions"] 的 apiReflect 来列出支持的操作。findNotes/findCards + notesInfo/cardsInfo 进行预览。error。deckNamescreateDeckfindNotes、findCardsnotesInfo(笔记 ID)addNote、addNotescanAddNotes 或 canAddNotesWithErrorDetail 进行预检。updateNoteFields、updateNoteTags 或组合的 updateNotedeleteNotessuspend、unsuspendchangeDecksetDueDatestoreMediaFile、retrieveMediaFile、getMediaFilesNames、getMediaDirPath、deleteMediaFiledata)、文件路径(path)或 URL(url)。syncfindNotes/findCards)or、括号和 - 表示 NOT 逻辑。deck:Name、tag:tagname、note:ModelName、card:CardName。front:... 或其他字段名称来限制字段。re: 进行正则表达式搜索,w: 进行单词边界搜索,nc: 忽略重音。is:due、is:new、is:learn、is:review、is:suspended、is:buried 来筛选卡片状态。prop: 搜索属性,如间隔或到期日。getEaseFactorssetEaseFactorssetSpecificValueOfCardsuspendunsuspendsuspendedareSuspendedareDuegetIntervalsfindCardscardsToNotescardsModTimecardsInfoforgetCardsrelearnCardsanswerCardssetDueDatedeckNamesdeckNamesAndIdsgetDeckscreateDeckchangeDeckdeleteDecksgetDeckConfigsaveDeckConfigsetDeckConfigIdcloneDeckConfigIdremoveDeckConfigIdgetDeckStatsguiBrowseguiSelectCardguiSelectedNotesguiAddCardsguiEditNoteguiAddNoteSetDataguiCurrentCardguiStartCardTimerguiShowQuestionguiShowAnswerguiAnswerCardguiUndoguiDeckOverviewguiDeckBrowserguiDeckReviewguiImportFileguiExitAnkiguiCheckDatabaseguiPlayAudiostoreMediaFileretrieveMediaFilegetMediaFilesNamesgetMediaDirPathdeleteMediaFilerequestPermissionversionapiReflectsyncgetProfilesgetActiveProfileloadProfilemultiexportPackageimportPackagereloadCollectionmodelNamesmodelNamesAndIdsfindModelsByIdfindModelsByNamemodelFieldNamesmodelFieldDescriptionsmodelFieldFontsmodelFieldsOnTemplatescreateModelmodelTemplatesmodelStylingupdateModelTemplatesupdateModelStylingfindAndReplaceInModelsmodelTemplateRenamemodelTemplateRepositionmodelTemplateAddmodelTemplateRemovemodelFieldRenamemodelFieldRepositionmodelFieldAddmodelFieldRemovemodelFieldSetFontmodelFieldSetFontSizemodelFieldSetDescriptionaddNoteaddNotescanAddNotescanAddNotesWithErrorDetailupdateNoteFieldsupdateNoteupdateNoteModelupdateNoteTagsgetNoteTagsaddTagsremoveTagsgetTagsclearUnusedTagsreplaceTagsreplaceTagsInAllNotesfindNotesnotesInfonotesModTimedeleteNotesremoveEmptyNotesgetNumCardsReviewedTodaygetNumCardsReviewedByDaygetCollectionStatsHTMLcardReviewsgetReviewsOfCardsgetLatestReviewIDinsertReviewsimportPackage 的路径是相对于 Anki collection.media 文件夹的,而不是客户端。deleteDecks 需要 cardsToo: true 才能同时删除卡片和牌组。此技能不需要捆绑脚本或资源。
每周安装次数
198
代码仓库
GitHub 星标数
228
首次出现
2026年1月21日
安全审计
安装于
opencode167
codex164
gemini-cli160
claude-code156
cursor153
github-copilot141
Enable reliable interaction with Anki through the AnkiConnect local HTTP API. Use this skill to translate user requests into AnkiConnect actions, craft JSON requests, run them via curl/jq (or equivalent tools), and interpret results safely.
http://127.0.0.1:8765 (default). Verify readiness using curl, e.g. curl -sS http://127.0.0.1:8765 should return Anki-Connect.CRITICAL — NO EXCEPTIONS
Before any destructive or modifying operation on notes or cards (adding, updating, deleting, rescheduling, suspending, unsuspending, changing deck, or changing fields/tags), request confirmation from the user. Use the AskUserQuestion tool if available; otherwise ask via chat. Only request confirmation once per logical operation, even if it requires multiple API calls (e.g., search + update + verify). Group confirmation by intent and scope (e.g., “Update 125 notes matching query X”).
Treat the following as confirmation-required by default:
addNote, addNotes, updateNoteFields, updateNoteTags, updateNote, updateNoteModel, deleteNotes, removeEmptyNotes, replaceTags, replaceTagsInAllNotes, clearUnusedTags.setEaseFactors, setSpecificValueOfCard, suspend, unsuspend, forgetCards, relearnCards, answerCards, setDueDate, changeDeck.Every request is JSON with:
action: string action nameversion: API version (use 6 unless user specifies otherwise)params: object of parameters (optional)Every response is JSON with:
result: return valueerror: null on success or a string describing the errorAlways check error before using result.
requestPermission first when interacting from a non-trusted origin; it is the only action that accepts any origin.version to ensure compatibility; older versions may omit the error field in responses when version ≤ 4.Prefer jq to build JSON and parse responses. Keep requests explicit and structured.
jq -n --arg action "deckNames" --argjson version 6 '{action:$action, version:$version}' \
| curl -sS http://127.0.0.1:8765 -X POST -H 'Content-Type: application/json' -d @-
jq -n \
--arg action "findNotes" \
--argjson version 6 \
--arg query "deck:French tag:verbs" \
'{action:$action, version:$version, params:{query:$query}}' \
| curl -sS http://127.0.0.1:8765 -X POST -H 'Content-Type: application/json' -d @-
curl -sS http://127.0.0.1:8765 -X POST -H 'Content-Type: application/json' -d @- \
| jq -e 'if .error then halt_error(1) else .result end'
Use multi to reduce round-trips and to group actions under a single confirmation when modifying data.
jq -n --argjson version 6 --arg query "deck:French" \
'{action:"multi", version:$version, params:{actions:[
{action:"findNotes", params:{query:$query}},
{action:"notesInfo", params:{notes:[]}}
]}}' \
| curl -sS http://127.0.0.1:8765 -X POST -H 'Content-Type: application/json' -d @-
Replace the empty array with the result of the previous action when chaining; in CLI usage, split into two calls unless using a scripting language.
requestPermission (safe).version to confirm the API level and use version: 6 in requests.apiReflect with scopes: ["actions"] to list supported actions.findNotes/findCards + notesInfo/cardsInfo for previews before modification.error for each response.deckNamescreateDeckfindNotes, findCardsnotesInfo (note IDs)addNote, addNotescanAddNotes or canAddNotesWithErrorDetail for preflight checks.updateNoteFields, updateNoteTags, or combined updateNotedeleteNotessuspend, unsuspendchangeDecksetDueDatestoreMediaFile, retrieveMediaFile, getMediaFilesNames, getMediaDirPath, deleteMediaFiledata), file path (path), or URL (url) for upload.syncfindNotes/findCards)or, parentheses, and - for NOT logic.deck:Name, tag:tagname, note:ModelName, card:CardName.front:... or other field names to limit by field.re: for regex, w: for word-boundary searches, nc: to ignore accents.is:due, , , , , to filter card states.getEaseFactorssetEaseFactorssetSpecificValueOfCardsuspendunsuspendsuspendedareSuspendedareDuegetIntervalsfindCardsdeckNamesdeckNamesAndIdsgetDeckscreateDeckchangeDeckdeleteDecksgetDeckConfigsaveDeckConfigsetDeckConfigIdcloneDeckConfigIdguiBrowseguiSelectCardguiSelectedNotesguiAddCardsguiEditNoteguiAddNoteSetDataguiCurrentCardguiStartCardTimerguiShowQuestionguiShowAnswerstoreMediaFileretrieveMediaFilegetMediaFilesNamesgetMediaDirPathdeleteMediaFilerequestPermissionversionapiReflectsyncgetProfilesgetActiveProfileloadProfilemultiexportPackageimportPackagemodelNamesmodelNamesAndIdsfindModelsByIdfindModelsByNamemodelFieldNamesmodelFieldDescriptionsmodelFieldFontsmodelFieldsOnTemplatescreateModelmodelTemplatesaddNoteaddNotescanAddNotescanAddNotesWithErrorDetailupdateNoteFieldsupdateNoteupdateNoteModelupdateNoteTagsgetNoteTagsaddTagsgetNumCardsReviewedTodaygetNumCardsReviewedByDaygetCollectionStatsHTMLcardReviewsgetReviewsOfCardsgetLatestReviewIDinsertReviewsimportPackage paths are relative to the Anki collection.media folder, not the client.deleteDecks requires cardsToo: true to delete cards along with decks.No bundled scripts or assets are required for this skill.
Weekly Installs
198
Repository
GitHub Stars
228
First Seen
Jan 21, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode167
codex164
gemini-cli160
claude-code156
cursor153
github-copilot141
Skills CLI 使用指南:AI Agent 技能包管理器安装与管理教程
31,600 周安装
is:newis:learnis:reviewis:suspendedis:buriedprop: searches for properties like interval or due date.cardsToNotescardsModTimecardsInfoforgetCardsrelearnCardsanswerCardssetDueDateremoveDeckConfigIdgetDeckStatsguiAnswerCardguiUndoguiDeckOverviewguiDeckBrowserguiDeckReviewguiImportFileguiExitAnkiguiCheckDatabaseguiPlayAudioreloadCollectionmodelStylingupdateModelTemplatesupdateModelStylingfindAndReplaceInModelsmodelTemplateRenamemodelTemplateRepositionmodelTemplateAddmodelTemplateRemovemodelFieldRenamemodelFieldRepositionmodelFieldAddmodelFieldRemovemodelFieldSetFontmodelFieldSetFontSizemodelFieldSetDescriptionremoveTagsgetTagsclearUnusedTagsreplaceTagsreplaceTagsInAllNotesfindNotesnotesInfonotesModTimedeleteNotesremoveEmptyNotes