-
Notifications
You must be signed in to change notification settings - Fork 0
Getting started
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 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.
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.
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.


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).
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 |
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.zipof many project JSONs. - Export all downloads a zip of every saved project.
- Delete all removes every project after confirm.
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.
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 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).
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.
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.
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).
Outgoing wikilinks to existing pages from a page. Namespace filters which linked namespaces are kept.
Full wiki search. See the CirrusSearch help page.
The Namespace list filters queue generator results to the namespaces you select. Click to toggle; selected namespaces stay highlighted.
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 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.
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
| 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.
| 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 |
| 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 |
| Input | Action |
|---|---|
| Type in search | Filter node types |
↑ / ↓
|
Move highlight in list |
Enter |
Add highlighted node at menu position |
Escape |
Close menu |
| 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:
- Skip graph - if it decides to skip, the process graph is not run for that page.
- Process graph - otherwise, transform the wikitext and (if it actually changed) show the edit in Review.
| 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."
| 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."
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).
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.