Citation Injector logo

Citation Injector

Community
WILLOSCAR
citation-injector

APPLIES/consumes a `citation-diversifier` budget report (`output/CITATION_BUDGET_REPORT.md`) to inject *in-scope* citations into an existing draft (NO NEW FACTS), so the run passes the global unique-citation gate without citation dumps.

Overview

PublisherWILLOSCAR
Repositoryresearch-units-pipeline-skills
Skill namecitation-injector
Stars
513
Forks
39
Bundled files
1
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.

  • 1 bundled files

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

  • Open source

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

Installation

Install the Citation Injector 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/WILLOSCAR/research-units-pipeline-skills/tree/main/.codex/skills/citation-injector
  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/WILLOSCAR/research-units-pipeline-skills.git /tmp/research-units-pipeline-skills
mkdir -p .claude/skills
cp -r /tmp/research-units-pipeline-skills/.codex/skills/citation-injector .claude/skills/citation-injector
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Citation Injector 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 Citation Injector 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 Citation Injector 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.

Citation Injector (deterministic baseline edits; budget-as-constraints)

Triggers & routing

  • Trigger: citation injector, apply citation budget, inject citations, add citations safely, 引用注入, 按预算加引用, 引用增密.

Purpose: make the pipeline converge when the draft is:

  • locally citation-dense but globally under-cited (too few unique keys), or
  • overly reusing the same citations across many subsections.

This skill is intentionally conservative and scriptable:

  • the script edits output/DRAFT.md directly using the budget report as constraints
  • injections stay evidence-neutral (NO NEW FACTS) and use only in-scope keys already listed for each H3

Inputs

  • output/DRAFT.md
  • output/CITATION_BUDGET_REPORT.md (from citation-diversifier)
  • outline/outline.yml (H3 id/title mapping)
  • citations/ref.bib (must contain every injected key)

Outputs

  • output/DRAFT.md (updated in place)
  • output/CITATION_INJECTION_REPORT.md (PASS/FAIL + what you changed)

Non-negotiables (NO NEW FACTS)

  • Only inject keys listed for that H3 in the budget report.
  • Do not introduce new numbers, new benchmarks, or superiority claims.
  • Do not add narration templates such as This subsection discusses or Next, we examine.
  • Do not produce cite dumps like [@a; @b; @c] as the only citations in a paragraph.

Paper-voice injection patterns (safe sentence shapes)

Use these as sentence intentions (paraphrase; do not copy verbatim).

  1. Axis-anchored exemplars (preferred)
  • Systems such as X [@a] and Y [@b] instantiate <axis/design point>, whereas Z [@c] explores a contrasting point under a different protocol.
  1. Parenthetical grounding (short, low-risk)
  • The same design pressure appears in nearby systems (e.g., X [@a], Y [@b], Z [@c]).
  1. Cluster pointer + contrast hint
  • Representative implementations span both <cluster A> (X [@a], Y [@b]) and <cluster B> (Z [@c]), suggesting that the trade-off hinges on <lens>.
  1. Decision-lens pointer
  • For builders choosing between <A> and <B>, prior systems provide concrete instantiations on both sides (X [@a]; Y [@b]; Z [@c]).
  1. Evaluation-lens pointer (still evidence-neutral)
  • Across commonly used agent evaluations, systems such as X [@a] and Y [@b] illustrate how <lens> is operationalized, while Z [@c] highlights a different constraint.
  1. Contrast without list voice
  • While many works operationalize <topic> via <mechanism> (X [@a]; Y [@b]), others treat it as <alternative> (Z [@c]), which changes the failure modes discussed later.

Anti-patterns (high-signal “budget dump” voice)

Avoid these stems (they read like automated injection):

  • A few representative references include
  • Notable lines of work include
  • Concrete examples include

If your draft contains these, rewrite them immediately using the patterns above (keep citation keys unchanged).

Placement guidance

  • Prefer inserting citations where the subsection already states a concrete contrast or decision lens.
  • If you must add a new sentence/mini-paragraph, place it early (often after paragraph 1) so it reads as positioning, not as an afterthought.
  • Keep injections subsection-specific: mention the subsection lens (H3 title / contrast_hook) so the same sentence cannot be copy-pasted into every H3.

Workflow

  1. Read the budget report (output/CITATION_BUDGET_REPORT.md)
  • Treat Global target (policy; blocking) as the PASS line for the pipeline gate (derived from queries.md:citation_target; A150++ default: recommended).
  • If Gap: 0, do nothing: write a short PASS report and move on.
  • Otherwise, for each H3 with suggested keys, pick enough keys to close the gap to target:
    • small gaps: 3-6 keys / H3
    • A150++ gaps: often 6-12 keys / H3 Prefer keys that are unused globally and avoid repeating the same new keys across many H3s.
  1. Inject in the right subsection
  • Use outline/outline.yml to confirm H3 ordering and ensure the injected sentence lands inside the correct ### subsection.
  1. Inject with paper voice
  • Prefer one short, axis-anchored sentence over a long enumerator sentence.
  • Keep injections evidence-neutral (NO NEW FACTS) and avoid new numbers.
  • Before you commit an injected key, confirm it exists in citations/ref.bib.
  1. Write output/CITATION_INJECTION_REPORT.md
  • Record which H3s you touched and which keys were added.
  • Mark - Status: PASS only when the global target is met.
  1. Verify
  • Rerun the validator script (below) to recheck the global target.
  • Then run draft-polisher to smooth any residual injection voice (citation keys must remain unchanged).

Done criteria

  • output/CITATION_INJECTION_REPORT.md exists and is - Status: PASS.
  • pipeline-auditor no longer FAILs on “unique citations too low”.

Script (optional; deterministic injector + validator)

You usually do not run this manually; it exists so a pipeline runner can deterministically apply a baseline injection and validate the target.

Quick Start

  • uv run python .codex/skills/citation-injector/scripts/run.py --workspace <workspace>

All Options

  • --workspace <dir>
  • --unit-id <U###> (optional; for logs)
  • --inputs <semicolon-separated> (rare override; prefer defaults)
  • --outputs <semicolon-separated> (rare override; default validates output/CITATION_INJECTION_REPORT.md)
  • --checkpoint <C#> (optional)

Examples

  • After you generate the budget report and want the script to apply the baseline injection:
    • uv run python .codex/skills/citation-injector/scripts/run.py --workspace <workspace>

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 Citation Injector AI skill do?

APPLIES/consumes a `citation-diversifier` budget report (`output/CITATION_BUDGET_REPORT.md`) to inject *in-scope* citations into an existing draft (NO NEW FACTS), so the run passes the global unique-citation gate without citation dumps.

Why use Citation Injector on TypingMind?

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

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/WILLOSCAR/research-units-pipeline-skills/tree/main/.codex/skills/citation-injector. 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 Citation Injector?

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 Citation Injector?

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

Is the Citation Injector AI skill free?

It is published on GitHub by WILLOSCAR. 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 👇