Borrowing it
Nothing to install: this file belongs to koaning/wigglystuff. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/koaning/wigglystuff/main/AGENTS.mdgit clone --depth 1 https://github.com/koaning/wigglystuffWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/koaning/wigglystuff/agents-md)<a href="https://agentmods.dev/instructions/koaning/wigglystuff/agents-md"><img src="https://agentmods.dev/badge/instructions/koaning/wigglystuff/agents-md/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/instructions/koaning/wigglystuff/agents-md"><img src="https://agentmods.dev/badge/instructions/koaning/wigglystuff/agents-md.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.05280 | $0.05280 |
| Opus 5.5 | $0.02112 | $0.02112 |
| Sonnet 5.5 | $0.01056 | $0.01056 |
| Haiku 4.5 | $0.00528 | $0.00528 |
Grade A, and why
wigglystuff AGENTS.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 169 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Setup
This repo uses a conductor.json setup script (make install) that runs
automatically when a Conductor workspace is created. It installs all
dependencies so the environment is ready to use immediately.
Agents
wigglystuff ships a small roster of AnyWidget "agents" that surface different
input modalities (sliders, speech, paint, etc.) across notebook runtimes. This
page is a quick lookup so you can see what exists and which traitlets each agent
syncs back to Python.
Quick reference
| Agent | Module/Class | Core traitlets | One-liner |
|---|---|---|---|
| AltairWidget | wigglystuff.altair_widget.AltairWidget |
spec, width, height |
Flicker-free Altair chart with smooth data updates |
| ScatterLog | wigglystuff.scatter_log.ScatterLog |
spec, width, height |
Accumulate reactive values into a live, optionally multi-series scatter plot |
| AnnotationWidget | wigglystuff.annotation.AnnotationWidget |
action, action_timestamp, note, listening, actions, keyboard_mapping, gamepad_mapping, debounce_ms, width |
Annotation input surface with buttons, keyboard, gamepad, and speech-to-text |
| ApiDoc | wigglystuff.api_doc.ApiDoc |
doc, width, show_private |
Renders API docs for Python classes/functions |
| Slider2D | wigglystuff.slider2d.Slider2D |
x, y, x_bounds, y_bounds, width, height |
2D pointer for coupled parameters |
| Knob | wigglystuff.knob.Knob |
value, min_value, max_value, step, start_angle, end_angle, ticks, steps, size, label, show_value, color, midi, midi_cc, midi_channel, midi_device, midi_key, midi_scope |
Audio-panel rotary knob with configurable sweep, detents, and Web MIDI learn |
| Fader | wigglystuff.fader.Fader |
value, min_value, max_value, step, ticks, steps, orientation, length, label, show_value, color, midi, midi_cc, midi_channel, midi_device, midi_key, midi_scope |
Mixing-console fader with a configurable tick scale, detents, and Web MIDI learn |
| MidiButton | wigglystuff.midi_button.MidiButton |
value, press_timestamp, velocity, label, icon, mode, size, color, midi, midi_note, midi_channel, midi_device, midi_key, midi_scope |
Momentary/toggle pad with icon or text faces and Web MIDI note learn |
| Pip | wigglystuff.pip.Pip |
child, width, height, floating |
Wraps a widget and floats it in a picture-in-picture window above other windows |
| FloatingPanel | wigglystuff.floating_panel.FloatingPanel |
child, corner, width, collapsed, title (not an AnyWidget — a marimo display helper) |
Pins any marimo content in a draggable in-page panel that stays visible while the notebook scrolls and minimizes to its header; portals to document.body to beat cell hover z-index; works in iframes/molab unlike Pip |
| BezierCurve | wigglystuff.bezier_curve.BezierCurve |
points, samples, x, y, t, closed, playing, loop, interval_ms, duration_ms, sync_throttle_ms, show_axes, n_samples, x_bounds, y_bounds, width, height |
Arbitrary-degree Bezier curve editor with draggable control points, playback, and optional axis ticks |
| CurveEditor | wigglystuff.curve_editor.CurveEditor |
points, samples, x, y, t, curve, closed, playing, loop, tension, alpha, selected_index, show_axes, n_samples, x_bounds, y_bounds, width, height |
Chart-space curve editor with D3 line interpolators, path progress, and optional axis ticks |
| ChartPuck | wigglystuff.chart_puck.ChartPuck |
x, y, x_bounds, y_bounds, axes_pixel_bounds, width, height, chart_base64, puck_radius, puck_color, throttle |
Draggable puck overlay for matplotlib charts |
| ChartMultiSelect | wigglystuff.chart_multi_select.ChartMultiSelect |
selections, active_class, n_classes, selected_index, mode, modes, x_bounds, y_bounds, axes_pixel_bounds, width, height, chart_base64, selection_opacity |
Multi-region class-labeled selection on matplotlib charts |
| ChartSelect | wigglystuff.chart_select.ChartSelect |
mode, selection, has_selection, x_bounds, y_bounds, axes_pixel_bounds, width, height, chart_base64, selection_color, selection_opacity |
Box/lasso selection on matplotlib charts |
| Matrix | wigglystuff.matrix.Matrix |
matrix, rows, cols, min_value, max_value, step, mirror |
Spreadsheet-like numeric editor |
| TangleSlider | wigglystuff.tangle.TangleSlider |
amount, min_value, max_value, step, steps, pixels_per_step |
Inline slider ala Bret Victor |
| TangleChoice | wigglystuff.tangle.TangleChoice |
choice, choices |
Inline toggle among labels |
| TangleSelect | wigglystuff.tangle.TangleSelect |
choice, choices |
Dropdown version of the above |
| TangleLatex | wigglystuff.tangle_latex.TangleLatex |
latex, parameters, values, display_mode, editor, reveal_all_on_drag, theme, error |
LaTeX formula with draggable \tangle{name} numbers/symbols |
| TangleDistribution | wigglystuff.tangle.TangleDistribution |
distribution, params, live_params, dragging, bounds, steps, pixels_per_step, template, digits, sync_throttle_ms |
Inline tangle number holding a whole distribution: drag ↔/↕ for its two scipy-named parameters with a floating shape preview; 14 families (norm, lognorm, gamma, expon, weibull_min, uniform, laplace, logistic, beta, poisson, binom, nbinom, geom, randint); built-in cdf/ppf/pdf/pmf/sample (maths in wigglystuff/_distributions.py, no scipy) |
| TangleFunction | wigglystuff.tangle_function.TangleFunction |
fn_name, parameters, param_order, values, theme, width, error |
Introspects a typed function into an editable call expression: drag numbers, click-cycle Literal/Enum/bool, edit strings; reads annotated_types/pydantic Field bounds; unbounded scrubbers by default; syncs values to splat into the function |
| FormulaAnimation | wigglystuff.formula_animation.FormulaAnimation |
steps, title, spotlight, step, height, theme, error |
Step through a LaTeX derivation one line at a time (prev/next buttons, opt-in arrow keys, reactive step); KaTeX-rendered with an optional final spotlight frame |
| SortableList | wigglystuff.sortable_list.SortableList |
value, addable, removable, editable, label |
Drag-and-drop ordering with optional CRUD |
| CopyToClipboard | wigglystuff.copy_to_clipboard.CopyToClipboard |
text_to_copy |
Copies the payload into the OS clipboard |
| ColorPicker | wigglystuff.color_picker.ColorPicker |
color |
Native color input with rgb helper |
| EdgeDraw | wigglystuff.edge_draw.EdgeDraw |
names, links, directed, width, height |
Sketch node/link diagrams and query adjacency |
| GridDraw | wigglystuff.grid_draw.GridDraw |
dots, lines, rows, cols, line_width, dot_radius, theme, width, height |
Draw dots on grid intersections and orthogonal line segments between them |
| HeatmapSelect | wigglystuff.heatmap_select.HeatmapSelect |
pinned_cell, pinned_row, pinned_col, hover_cell, hover_row, hover_col, image_base64, n_rows, n_cols, x_range, y_range, cell_width, cell_height, row_color, col_color, throttle |
Bret Victor style parameter-space grid; pin a cell plus a whole row/column off either axis |
| GraphWidget | wigglystuff.graph_widget.GraphWidget |
nodes, edges, directed, width, height, selected_nodes, selected_edges |
Programmatic force-directed graph visualization |
| Paint | wigglystuff.paint.Paint |
base64, width, height, store_background, rainbow_brush, brush, marker, eraser, color_picker, color |
MS-Paint-style canvas with PIL helpers and a configurable toolbar |
| Excalidraw | wigglystuff.excalidraw.Excalidraw |
scene, image_base64, theme, height, sync_throttle_ms |
Embedded Excalidraw whiteboard (loads from CDN); get_pil/save/from_file helpers (save() remembers the path) |
| ParallelCoordinates | wigglystuff.parallel_coords.ParallelCoordinates |
data, color_by, height, filtered_indices, selected_indices, brush_extents, selections |
HiPlot-powered parallel coordinates with brush filtering and axis reordering |
| ThreeWidget | wigglystuff.three_widget.ThreeWidget |
data, width, height, show_grid, show_axes, dark_mode, axis_labels, animate_updates, animation_duration_ms |
3D scatter plot for point clouds |
| WebcamCapture | wigglystuff.webcam_capture.WebcamCapture |
image_base64, capturing, interval_ms, facing_mode |
Webcam preview with snapshot capture |
| GamepadWidget | wigglystuff.gamepad.GamepadWidget |
axes, current_button_press, dpad_*, current_timestamp |
Streams browser Gamepad API events |
| HoverZoom | wigglystuff.hover_zoom.HoverZoom |
image, zoom_factor, width, height, _crop |
Image hover zoom with magnified side panel |
| KeystrokeWidget | wigglystuff.keystroke.KeystrokeWidget |
last_key |
Captures the latest keypress w/ modifiers |
| LiveEdit | wigglystuff.live_edit.LiveEdit |
code, trace, annotations, error, editable, theme, width, height, float_precision, visible_columns |
Source-linked loop trace for inspecting one Python function run; click numeric column headers to chart them |
| ManimWeb | wigglystuff.manim_web.ManimWeb |
code, width, height, version, error |
Runs a manim-web (browser Manim) scene from a JS string, local file, or URL |
| ObservablePlot | wigglystuff.observable_plot.ObservablePlot |
code, variables, width, height, version, error |
Runs Observable Plot JS from a string, local file, or URL, injecting Python variables by name |
| EsmWidget | wigglystuff.esm_widget.EsmWidget |
code, css, data, width, height, error |
Renders an inline ES module (any CDN library, e.g. motion.dev or Observable Plot) with a two-way data bridge; change:data fires without re-running render |
| AsyncFlow | wigglystuff.async_flow.AsyncFlow |
events, now_ms, running, width |
Live swimlane timeline of one async run (await AsyncFlow.trace(main())); one lane per task, running vs suspended-at-await, nested by parent; needs Python 3.12+ |
| WebkitSpeechToTextWidget | wigglystuff.talk.WebkitSpeechToTextWidget |
transcript, listening, trigger_listen |
WebKit speech recognition bridge |
| DriverTour | wigglystuff.driver_tour.DriverTour |
steps, auto_start, show_progress, active, current_step |
Guided product tours via Driver.js |
| CellTour | wigglystuff.cell_tour.CellTour |
steps, auto_start, show_progress, active, current_step |
Simplified cell-based tours for marimo |
| TextCompare | wigglystuff.text_compare.TextCompare |
text_a, text_b, matches, selected_match, min_match_words |
Side-by-side text diff with match highlighting |
| EnvConfig | wigglystuff.env_config.EnvConfig |
variables, all_valid |
Environment variable config with validation |
| ModuleTreeWidget | wigglystuff.module_tree.ModuleTreeWidget |
tree, initial_expand_depth |
Interactive tree viewer for PyTorch nn.Module |
| Neo4jWidget | wigglystuff.neo4j_widget.Neo4jWidget |
nodes, relationships, schema, error, query_running, selected_nodes, selected_relationships, width, height |
Interactive Neo4j graph explorer with Cypher query input |
| SplineDraw | wigglystuff.spline_draw.SplineDraw |
data, curve, curve_error, brushsize, n_classes, width, height |
Draw scatter points with Python-computed spline curve fitting |
| ScatterWidget | re-exported from drawdata |
data, brushsize, width, height, n_classes |
Paint multi-class 2D scatter data with brush |
| PlaySlider | wigglystuff.play_slider.PlaySlider |
value, min_value, max_value, step, interval_ms, playing, loop, width |
Slider with play/pause button for auto-advancing values |
| FramePlayer | wigglystuff.frame_player.FramePlayer |
frames, value, interval_ms, playing, loop, width, show_index |
Play a sequence of images (PIL/paths/URLs/figures) as an inline looping "video" |
| CircularSlider | wigglystuff.circular_slider.CircularSlider |
value, start, stop, step, size, thickness, show_value, color, label |
Circular dial slider for picking a single value |
| CircularRangeSlider | wigglystuff.circular_slider.CircularRangeSlider |
value ((low, high)), start, stop, step, size, thickness, show_value, color, label |
Circular dial slider for picking a span of values (wraps the seam) |
| HoverSlider | wigglystuff.hover_slider.HoverSlider |
value, hover_value, hovering, start, stop, step, steps, sync_throttle_ms, show_value, label, color, width |
Slider that emits both the committed value and the live value under the pointer |
| RidgelineChart | wigglystuff.ridgeline_chart.RidgelineChart |
data, x_values, width, height, overlap, stroke_width, fill_opacity, peak_scale, x_label, y_label, selected_index, selected_row |
Stacked waveform "Joy Division" visualization with clickable rows |
| Treemap | wigglystuff.treemap.Treemap |
data, width, height, max_depth, value_col, selected_path, clicked_path, hovered_path |
Zoomable hierarchical treemap with breadcrumbs |
| WidgetDAG | wigglystuff.widget_dag.WidgetDAG |
nodes, edges, layout (not an AnyWidget — a marimo display helper) |
Arrange live widgets/images as a DAG (columns by edge-depth) and draw the connecting arrows; WidgetDAG.from_widgets([...]) derives the edges from marimo's dataflow graph (one node per cell) |
| Hint | wigglystuff.hint.Hint |
target, note, side, color, gap (not an AnyWidget — a marimo display helper) |
Wrap a widget and curve an arrow from an explanatory note to its edge; the note is any marimo content, and hints compose into stacks, WidgetDAG nodes, and each other |
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 169 lines · 5,280 tokens per session scan A 55236df1ea61
wigglystuff AGENTS.md is an instructions file published in the GitHub repository koaning/wigglystuff (450 stars, last pushed yesterday), licensed MIT. It adds 5,280 tokens to every session, about $0.0211 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-14.
Other instructions, from other repositories
vscode buildNext.instructions.md
Working notes and architecture documentation for the new esbuild-based build system in build/next. Use when making changes to the new build pipeline (transpile/bundle commands, NLS plugin, source-map handling, resource copying, or self-hosting watch tasks).
next.js AGENTS.md
AGENTS.md instructions for vercel/next.js, covering next.js development guide, codebase structure, monorepo overview, core package: packages/next and other important packages.
vscode oss-third-party-notices.instructions.md
Instructions for microsoft/vscode, covering vs code oss third-party-notices pipeline, architecture, pipeline flow in ci, cache eligibility and rollout and applying the notice (cutover).
langchain AGENTS.md
AGENTS.md instructions for langchain-ai/langchain, covering global development guidelines for the langchain monorepo, corridor security analysis, project architecture and context, monorepo structure and development tools & commands.
deepseek-harness AGENTS.md
AGENTS.md instructions for deepseek-ai/deepseek-harness, covering agents.md, pre-stable apis and released session data, repository layout, commands and host sandbox failures.
vscode copilot-instructions.md
Copilot instructions for microsoft/vscode, covering vs code copilot instructions, project overview, root folders, core architecture (src/ folder) and built-in extensions (extensions/ folder).