Skip to content
msk edited this page Jul 18, 2026 · 6 revisions

Pillbug is composed of 3 tabs: Config, Code, and Review. You can switch between tabs using the navbar on the top right. At the bottom of every sidebar is the project bar (name + Save / Save copy or Load); on Config, a projects list fills the space under login.

Config

Config is where you log in, manage saved projects, install nodepacks, and decide what pages you will edit—either by manually typing a list, or by using the generator.

Logging in

Pillbug supports OAuth when the Toolforge (or other) deployment has OAuth configured, and BotPasswords otherwise. Set Wiki origin to the MediaWiki site you want to edit (e.g. https://en.wikipedia.org) before logging in.

OAuth

If you see OAuth Login, use that. You’ll be sent to the wiki to authorize the app, then returned to Pillbug already logged in. Use Logout when you’re done. On English Wikipedia, access may still require being allowed on AWB’s CheckPage after OAuth succeeds.

BotPassword

If you see username and password fields instead, create a BotPassword on the wiki: visit Special:BotPasswords on that MediaWiki instance. For English Wikipedia: https://en.wikipedia.org/wiki/Special:BotPasswords — create a bot password with at least High-volume (bot) access, Edit existing pages, and optionally Edit protected pages.

After **Create**, copy the credentials into Pillbug’s username and bot-password fields and press **Login**. The bot password is not stored in the browser.

Projects

A project is a named snapshot of your workspace stored in the browser (IndexedDB): process and skip graphs, page queue, generator settings, wiki origin / username / prefetch mode, and the Review edit summary. Extension packs and login sessions are not inside a project (packs stay installed separately; you still log in after loading).

Project bar (every tab)

At the bottom of the sidebar:

Control Behavior
Name Editable current project name
Save Overwrite that name with the current workspace
Save copy Save under a new name derived from the current one (see Save copy mode). Shown when the name field matches the last loaded/saved project
Load Load the typed name from storage. Replaces Save copy when you’ve edited the name away from the current project

Projects list (Config sidebar)

Under login on Config:

  • Search filters the list by name.
  • Click a row to load that project.
  • Per row: Export (single JSON) and Delete.
  • Import accepts one project .json, or a .zip of many project JSONs.
  • Export all downloads a zip of every saved project.
  • Delete all removes every project after confirm.

Save copy mode

Also on Config. Controls how Save copy names the new project:

Mode New name
Timestamp {name}_{UTC timestamp} (default)
Incremental {name}_1, {name}_2, …
Append “copy” {name} copy, then {name} copy 2, …

Use Save copy as lightweight versioning before risky graph or queue changes.

Page queue

The page queue is the queue of pages to "work" on, i.e. the pages that will be processed by the code in the Code tab and be reviewed in the Review tab. It can either be manually created, or generated using the queue generator.

Queue generator

Queue generation relies on the Action API, and as such you need to be logged in. Results are capped at about 5,000 titles per generation; extra matches are truncated.

Pick one source with the radio on the left, fill its fields, optionally set Namespace, then press Generate. That replaces the current queue with the generated titles (you can still edit the textarea afterward and press Set queue).

Category

Members of a category (title like Category:Example; Category: is added if missing).

  • pages - normal pages in the category
  • subcategories - subcategory pages. By default, even when filtered for the Category namespace, subcategories are excluded.
  • files - file pages in the category. By default, even when filtered for the File namespace, files are excluded.

Select at least one of those types.

Links to page

Pages that link to a given title.

  • wikilinks - pages that link to the target, see also Help:Links
  • transclusions - pages that transclude the target
  • file usage - pages that use the file (target is treated as File:... if needed)

There is also redirect filtering.

  • both - redirects and non-redirects
  • redirects - only redirect pages
  • non-redirects - only non-redirects

When using wikilinks, Include links to redirects controls whether to also follow through redirects of the target.

Pages with prefix

Titles starting with a given string.

  • Strict prefix search (on) - uses the all-pages list API for an exact prefix per selected namespace (good for precise searches, like User:Example/).
  • Strict prefix search (off) - uses prefix search (more "search-box" style matching across the selected namespaces).

Links on page

Outgoing wikilinks to existing pages from a page. Namespace filters which linked namespaces are kept.

Wiki search

Full wiki search. See the CirrusSearch help page.

Namespace

The Namespace list filters queue generator results to the namespaces you select. Click to toggle; selected namespaces stay highlighted.

Process ahead?

At the top of the queue generator is the process ahead? toggle. Pillbug will always fetch upcoming pages in the queue and run the skip graph; with process ahead? enabled, it will also run the process graph, meaning that reviewing edits will be slightly faster in some cases.

Nodepacks

Nodepacks are installable bundles of graph nodes (extra building blocks for the Code tab), beyond Pillbug's defaults. Packs are typically installed once per browser; as they persist across reloads. After installing, switch to Code to place the new nodes in the process/skip graphs. If a pack fails to load, the Config column will show an error. A template nodepack is available here.

Code

The Code tab holds two nodish graphs that run on each page from the page queue: the skip graph and the process graph. Both receive the same inputs for a page; they differ in what they return and when they run.

NodeViewer controls

Keyboard

Input Action
Escape Close add-node menu, if open
Escape Go up one composite level, if in a composite
Escape Clear selection, if nodes are selected
Escape Reset pan and zoom to default, if nothing else applies
Ctrl+C / Cmd+C Copy selected nodes (and wires between them) relative to cursor
Ctrl+V / Cmd+V Paste clipboard at cursor, preserving relative layout
Delete / Backspace Delete selected nodes (boundary Input/Output nodes are excluded)

Keyboard shortcuts are ignored while focus is in an input, textarea, or select.

Mouse / pointer (canvas)

Input Action
Scroll wheel Zoom in/out toward cursor (25%–200%)
Middle button + drag Pan the canvas
Left click on empty canvas Clear selection and close add-node menu
Left drag on empty canvas Marquee (box) select nodes
Right click on empty canvas Open add-node menu at cursor
Right drag Slice/cut wires crossed by the drag path

Mouse / pointer (nodes)

Input Action
Left click on node body Select node
Shift + left click on node Add/remove node from selection
Left click on node in a multi-selection Keep group selected (for dragging)
Left drag on node header Move selected node(s)
Double-click composite node header Go into composite
Left drag on port socket Start a wire; release on a compatible port to connect

Add-node menu (right-click)

Input Action
Type in search Filter node types
/ Move highlight in list
Enter Add highlighted node at menu position
Escape Close menu

Group panel (while in a composite)

Input Action
Up button Go up one level (esc also works)

Shared inputs:

Port Type Notes
Title title The page's title - note that this is not a string, and thus may need to be converted to one using the "Title to String" node.
Content string The current page's wikitext.

When reviewing, Pillbug evaluates pages in this order:

  1. Skip graph - if it decides to skip, the process graph is not run for that page.
  2. Process graph - otherwise, transform the wikitext and (if it actually changed) show the edit in Review.

Skip graph

Port Type Notes
Skip boolean Whether to skip or not.
The Skip graph is entirely optional; however with complicated process graphs, it can significantly speed up reviewing. Most of the filtering should already have been done during queue generation, however for hard-to-filter-for edge cases, e.g. if an article uses a template but not the specific parameter needing to be replaced, the skip graph will be useful.

If Skip is true, processing for that page will be aborted, removing it from the queue and logging it as skipped. Errors in the skip graph (node failures, type errors, etc.) are treated as a hard failure for that page: the page is dropped from the queue and an error is surfaced (prefixed like Skip graph: …). They are not shown as a normal "skip."

Process graph

Port Type Notes
ContentAfter string The contents of the page, presumably after modifications.

The process graph is the edit itself, building a new wikitext string from the title and current content. After a run:

Result Behavior
ContentAfter equals Content Page will be skipped.
ContentAfter differs The page is offered in Review as a diff (before = Content, after = ContentAfter) for Save / Skip / etc.
ContentAfter missing or not a string Error: Process graph did not return ContentAfter string - page dropped from the queue in a batch, same class of failure as other graph errors.
Node / runtime errors Prefixed Process graph: ...; page dropped from the queue in a batch.

Wire the graph so a string always reaches ContentAfter on paths you care about. An empty or incomplete graph that never produces ContentAfter will error rather than "do nothing."

Review

The Review tab is where you inspect each proposed edit as a diff, then save, skip, or undo. You need to be logged in to start a review run or to save / undo. You can still open the tab and look at past log entries while logged out.

Controls include an edit summary, optional Minor edit, Start / Stop for the batch, Save (or Undo when an applied log entry is selected), and Skip. Skip is disabled while you’re viewing a historical log entry (not the live queue item).

Review log

Below the controls is a list of recent outcomes (newest first). Each row shows the page title, a status chip, and a timestamp.

Status Meaning
applied Saved to the wiki
skipped You pressed Skip, or the page was automatically skipped
undone A previously applied edit was reverted via Undo
pending Reserved for entries that are neither applied, skipped, nor undone

Click a log row to load that page’s stored before / after into the diff. Selecting an applied entry (not yet undone) switches the primary button to Undo. Click the same selected row again to clear the selection and return to the live queue review.