Zotero Dev Rules logo

Zotero Dev Rules

Community
Agents365-ai
zotero-dev-rules

Developing with Zotero: Web API v3 (read/write, file upload, sync, OAuth, item types/fields), the desktop client's JS API, plugin development (7-10), translators (web/import/export/search), and CSL/citeproc-js styles. Use when scripting Zotero or building or debugging a plugin, translator, or citation style.

Overview

PublisherAgents365-ai
Repository365-skills
Skill namezotero-dev-rules
Stars
99
Forks
16
Bundled files
9
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.

  • 9 bundled files

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

  • Open source

    Published by Agents365-ai on GitHub. Read the source before you install it.

Installation

Install the Zotero Dev Rules 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/Agents365-ai/365-skills/tree/main/plugins/zotero-dev-rules/skills/zotero-dev-rules
  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/Agents365-ai/365-skills.git /tmp/365-skills
mkdir -p .claude/skills
cp -r /tmp/365-skills/plugins/zotero-dev-rules/skills/zotero-dev-rules .claude/skills/zotero-dev-rules
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Zotero Dev Rules 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 Zotero Dev Rules 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 Zotero Dev Rules 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.

Zotero Dev Rules

Zotero is an open-source reference manager. Developers extend it three ways: the Web API (https://api.zotero.org) for online libraries, plugins / the internal JavaScript API for the desktop client, and translators (JS scrapers/converters). Citations come from CSL styles via citeproc-js. This skill mirrors https://www.zotero.org/support/dev so you can answer Zotero dev questions and build integrations without re-fetching.

When to use this skill

  • Reading from / writing to a Zotero library over the Web API (items, collections, tags, searches).
  • File attachment upload, full-library or partial syncing, streaming (WebSocket) updates, OAuth.
  • Building or debugging a Zotero plugin (7–10 bootstrapped era; Zotero 10 migration notes included); scripting the client via its JavaScript API / Run JavaScript.
  • Finding an existing open-source plugin with similar functionality (to study its code) before building a new one.
  • Writing or fixing a translator (web/import/export/search) and testing it in Scaffold.
  • Creating or editing CSL citation styles; working with citeproc-js / citeproc-node.

Reference index — load the file you need

FileCovers
references/web-api.mdBase URL, auth/API keys, versioning, read requests, write requests, batch, file upload, item types/fields, syncing algorithm, streaming API, OAuth
references/client-and-plugins.mdInternal JavaScript API (Zotero.Items/Item/Search/DB/Notifier), Run JavaScript, plugin development (Zotero 7 bootstrap/manifest), Zotero 10 migration notes, client coding entry points
references/translators.mdTranslator metadata block, detectWeb/doWeb/doImport/doExport/doSearch, scraping helpers (text/attr/ZU), HTTP requests, calling other translators, Scaffold/testing
references/citation-styles.mdCSL, citeproc-js / citeproc-node, style repository, style editing, type mapping
references/plugin-gallery.mdSnapshot of the zotero-chinese plugin-store registry (137 plugins by tag + deprecated list) — find similar open-source plugins and study their code before building

Cheat sheet — Web API

bash
# Read (public library needs no key). HTTPS only. Always pin the version.
curl -H "Zotero-API-Version: 3" -H "Zotero-API-Key: <KEY>" \
  "https://api.zotero.org/users/<userID>/items?format=json&limit=25"

# Library prefix: /users/<userID> or /groups/<groupID>
# Common params: format=json|atom|bib|keys|versions, include=bib,citation, q=, itemType=, tag=,
#                sort=, direction=, limit=1..100 (def 25), start=, since=<version>
# Response headers: Last-Modified-Version, Total-Results, Link (rel=next/last), Backoff
# Rate limits: honor Backoff; on 429 wait per Retry-After.

# Write (key with write access). Up to 50 objects/request. Must carry a version.
curl -X POST -H "Zotero-API-Key: <KEY>" -H "Content-Type: application/json" \
  -H "If-Unmodified-Since-Version: <libVersion>" \
  -d '[{"itemType":"book","title":"..."}]' \
  "https://api.zotero.org/users/<userID>/items"
# PUT replaces (omitted fields cleared); PATCH merges (only changed fields). 412 = version mismatch.
javascript
// Client internal JS API (Run JavaScript / plugin). Most DB/disk/network calls are async.
let item = new Zotero.Item('journalArticle');
item.setField('title', 'Example');
item.setCreators([{ creatorType: 'author', firstName: 'Jane', lastName: 'Doe' }]);
await item.saveTx();                               // async, own transaction
let items = ZoteroPane.getSelectedItems();         // window scope

Key endpoints: /itemTypes /itemFields /itemTypeFields?itemType= /itemTypeCreatorTypes?itemType= /creatorFields /items/new?itemType= · full schema: https://api.zotero.org/schema.

Hard rules

  • Always pin the API version with Zotero-API-Version: 3 (production) — never rely on the default. Pass keys via the Zotero-API-Key header (or Authorization: Bearer), not the key= query param.
  • Every write must carry a version (If-Unmodified-Since-Version header or per-object version). Missing → 428; mismatch → 412 Precondition Failed (re-fetch, merge, retry). Batch max 50 objects.
  • Respect rate limits: obey the Backoff header proactively; on 429 wait Retry-After and slow down.
  • mtime is in milliseconds, not seconds. File upload is a 3-step flow (authorize → S3 → register); new attachment uses If-None-Match: *, replacement uses If-Match: <previous-md5>.
  • Client JS API is async: await saveTx() / getAsync() / Zotero.DB.executeTransaction(...). Use saveTx() for single saves; wrap batches in one transaction. Get the Zotero object via chrome://zotero/content/include.js.
  • Translators: metadata block + functions + test cases; detectWeb returns a type / "multiple" / false; finish items with item.complete(). Use promise helpers (requestText/JSON/Document). Licensed AGPL v3; submit via PR to zotero/translators. Test in Scaffold.
  • Syncing is version-based: treat the library version as an opaque monotonic integer; use ?format=versions + ?since= to diff, store pristine JSON snapshots for 3-way merge, restart the pass if Last-Modified-Version changes mid-sync. New local objects start at version 0.
  • Citation styles use CSL + citeproc-js; submit styles to the citation-style-language/styles repo per its CONTRIBUTING guidelines — don't hand-roll a citation formatter.

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 Zotero Dev Rules AI skill do?

Developing with Zotero: Web API v3 (read/write, file upload, sync, OAuth, item types/fields), the desktop client's JS API, plugin development (7-10), translators (web/import/export/search), and CSL/citeproc-js styles. Use when scripting Zotero or building or debugging a plugin, translator, or citation style.

Why use Zotero Dev Rules on TypingMind?

Because you install it once and use it with any model. Zotero Dev Rules 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 Zotero Dev Rules in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/Agents365-ai/365-skills/tree/main/plugins/zotero-dev-rules/skills/zotero-dev-rules. 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 Zotero Dev Rules?

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 Zotero Dev Rules?

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

Is the Zotero Dev Rules AI skill free?

It is published on GitHub by Agents365-ai. Check the repository for licensing terms. 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 👇