mindforge-cc 11.5.0 → 11.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/mindforge/skill-tdd.md +53 -0
- package/.agent/mindforge/skills-index.md +118 -0
- package/.agent/mindforge/systematic-debug.md +60 -0
- package/.agent/skills/1password-skill/SKILL.md +156 -0
- package/.agent/skills/1password-skill/references/cli-examples.md +31 -0
- package/.agent/skills/1password-skill/references/get-started.md +21 -0
- package/.agent/skills/article-illustrator/SKILL.md +199 -0
- package/.agent/skills/article-illustrator/references/prompt-construction.md +426 -0
- package/.agent/skills/article-illustrator/references/style-presets.md +80 -0
- package/.agent/skills/article-illustrator/references/styles.md +224 -0
- package/.agent/skills/article-illustrator/references/usage.md +50 -0
- package/.agent/skills/article-illustrator/references/workflow.md +332 -0
- package/.agent/skills/arxiv/SKILL.md +275 -0
- package/.agent/skills/blogwatcher/SKILL.md +130 -0
- package/.agent/skills/code-wiki/SKILL.md +438 -0
- package/.agent/skills/code-wiki/templates/README.md +31 -0
- package/.agent/skills/code-wiki/templates/architecture.md +30 -0
- package/.agent/skills/code-wiki/templates/getting-started.md +47 -0
- package/.agent/skills/code-wiki/templates/module.md +38 -0
- package/.agent/skills/codebase-inspection/SKILL.md +109 -0
- package/.agent/skills/comic-creator/SKILL.md +240 -0
- package/.agent/skills/comic-creator/references/analysis-framework.md +176 -0
- package/.agent/skills/comic-creator/references/auto-selection.md +71 -0
- package/.agent/skills/comic-creator/references/base-prompt.md +98 -0
- package/.agent/skills/comic-creator/references/character-template.md +180 -0
- package/.agent/skills/comic-creator/references/ohmsha-guide.md +85 -0
- package/.agent/skills/comic-creator/references/partial-workflows.md +106 -0
- package/.agent/skills/comic-creator/references/storyboard-template.md +143 -0
- package/.agent/skills/comic-creator/references/workflow.md +401 -0
- package/.agent/skills/concept-diagrams/SKILL.md +355 -0
- package/.agent/skills/concept-diagrams/references/dashboard-patterns.md +43 -0
- package/.agent/skills/concept-diagrams/references/infrastructure-patterns.md +144 -0
- package/.agent/skills/concept-diagrams/references/physical-shape-cookbook.md +42 -0
- package/.agent/skills/creative-ideation/SKILL.md +144 -0
- package/.agent/skills/creative-ideation/references/full-prompt-library.md +110 -0
- package/.agent/skills/devops-cli/SKILL.md +149 -0
- package/.agent/skills/devops-cli/references/app-discovery.md +112 -0
- package/.agent/skills/devops-cli/references/authentication.md +59 -0
- package/.agent/skills/devops-cli/references/cli-reference.md +104 -0
- package/.agent/skills/devops-cli/references/running-apps.md +171 -0
- package/.agent/skills/devops-watchers/SKILL.md +103 -0
- package/.agent/skills/docker-management/SKILL.md +273 -0
- package/.agent/skills/domain-intel/SKILL.md +96 -0
- package/.agent/skills/duckduckgo-search/SKILL.md +230 -0
- package/.agent/skills/github-auth/SKILL.md +240 -0
- package/.agent/skills/github-code-review/SKILL.md +474 -0
- package/.agent/skills/github-code-review/references/review-output-template.md +74 -0
- package/.agent/skills/github-issues/SKILL.md +363 -0
- package/.agent/skills/github-issues/templates/bug-report.md +35 -0
- package/.agent/skills/github-issues/templates/feature-request.md +31 -0
- package/.agent/skills/github-pr-workflow/SKILL.md +360 -0
- package/.agent/skills/github-pr-workflow/references/ci-troubleshooting.md +183 -0
- package/.agent/skills/github-pr-workflow/references/conventional-commits.md +71 -0
- package/.agent/skills/github-pr-workflow/templates/pr-body-bugfix.md +35 -0
- package/.agent/skills/github-pr-workflow/templates/pr-body-feature.md +33 -0
- package/.agent/skills/github-repo-management/SKILL.md +509 -0
- package/.agent/skills/github-repo-management/references/github-api-cheatsheet.md +161 -0
- package/.agent/skills/godmode/SKILL.md +396 -0
- package/.agent/skills/godmode/references/jailbreak-templates.md +128 -0
- package/.agent/skills/godmode/references/refusal-detection.md +142 -0
- package/.agent/skills/hyperframes/SKILL.md +182 -0
- package/.agent/skills/hyperframes/references/cli.md +185 -0
- package/.agent/skills/hyperframes/references/composition.md +129 -0
- package/.agent/skills/hyperframes/references/features.md +289 -0
- package/.agent/skills/hyperframes/references/gsap.md +136 -0
- package/.agent/skills/hyperframes/references/troubleshooting.md +137 -0
- package/.agent/skills/hyperframes/references/website-to-video.md +145 -0
- package/.agent/skills/jupyter-live-kernel/SKILL.md +160 -0
- package/.agent/skills/kanban-orchestrator/SKILL.md +209 -0
- package/.agent/skills/kanban-worker/SKILL.md +188 -0
- package/.agent/skills/llm-wiki/SKILL.md +499 -0
- package/.agent/skills/meme-generation/SKILL.md +122 -0
- package/.agent/skills/node-inspect-debugger/SKILL.md +312 -0
- package/.agent/skills/obsidian/SKILL.md +60 -0
- package/.agent/skills/osint-investigation/SKILL.md +269 -0
- package/.agent/skills/osint-investigation/templates/source-template.md +59 -0
- package/.agent/skills/oss-forensics/SKILL.md +422 -0
- package/.agent/skills/oss-forensics/references/evidence-types.md +89 -0
- package/.agent/skills/oss-forensics/references/github-archive-guide.md +184 -0
- package/.agent/skills/oss-forensics/references/investigation-templates.md +131 -0
- package/.agent/skills/oss-forensics/references/recovery-techniques.md +164 -0
- package/.agent/skills/oss-forensics/templates/forensic-report.md +151 -0
- package/.agent/skills/oss-forensics/templates/malicious-package-report.md +43 -0
- package/.agent/skills/parallel-cli/SKILL.md +384 -0
- package/.agent/skills/pinggy-tunnel/SKILL.md +302 -0
- package/.agent/skills/pixel-art/SKILL.md +209 -0
- package/.agent/skills/pixel-art/references/palettes.md +49 -0
- package/.agent/skills/plan/SKILL.md +331 -0
- package/.agent/skills/polymarket/SKILL.md +75 -0
- package/.agent/skills/polymarket/references/api-endpoints.md +220 -0
- package/.agent/skills/python-debugpy/SKILL.md +368 -0
- package/.agent/skills/requesting-code-review/SKILL.md +273 -0
- package/.agent/skills/research-paper-writing/SKILL.md +2367 -0
- package/.agent/skills/research-paper-writing/references/autoreason-methodology.md +394 -0
- package/.agent/skills/research-paper-writing/references/checklists.md +434 -0
- package/.agent/skills/research-paper-writing/references/citation-workflow.md +563 -0
- package/.agent/skills/research-paper-writing/references/experiment-patterns.md +728 -0
- package/.agent/skills/research-paper-writing/references/human-evaluation.md +476 -0
- package/.agent/skills/research-paper-writing/references/paper-types.md +481 -0
- package/.agent/skills/research-paper-writing/references/reviewer-guidelines.md +433 -0
- package/.agent/skills/research-paper-writing/references/sources.md +191 -0
- package/.agent/skills/research-paper-writing/references/writing-guide.md +474 -0
- package/.agent/skills/research-paper-writing/templates/README.md +251 -0
- package/.agent/skills/rest-graphql-debug/SKILL.md +507 -0
- package/.agent/skills/s6-container-supervision/SKILL.md +171 -0
- package/.agent/skills/scrapling/SKILL.md +328 -0
- package/.agent/skills/sherlock/SKILL.md +186 -0
- package/.agent/skills/simplify-code/SKILL.md +168 -0
- package/.agent/skills/skill-authoring/SKILL.md +158 -0
- package/.agent/skills/spike/SKILL.md +190 -0
- package/.agent/skills/subagent-driven-development/SKILL.md +345 -0
- package/.agent/skills/subagent-driven-development/references/context-budget-discipline.md +53 -0
- package/.agent/skills/subagent-driven-development/references/gates-taxonomy.md +93 -0
- package/.agent/skills/systematic-debugging/SKILL.md +360 -0
- package/.agent/skills/test-driven-development/SKILL.md +336 -0
- package/.agent/skills/video-orchestrator/SKILL.md +194 -0
- package/.agent/skills/video-orchestrator/references/examples.md +227 -0
- package/.agent/skills/video-orchestrator/references/intake.md +166 -0
- package/.agent/skills/video-orchestrator/references/kanban-setup.md +278 -0
- package/.agent/skills/video-orchestrator/references/monitoring.md +180 -0
- package/.agent/skills/video-orchestrator/references/role-archetypes.md +298 -0
- package/.agent/skills/video-orchestrator/references/tool-matrix.md +317 -0
- package/.agent/skills/web-pentest/SKILL.md +332 -0
- package/.agent/skills/web-pentest/references/bypass-techniques.md +133 -0
- package/.agent/skills/web-pentest/references/exploitation-techniques.md +204 -0
- package/.agent/skills/web-pentest/references/scope-enforcement.md +110 -0
- package/.agent/skills/web-pentest/references/vuln-taxonomy.md +81 -0
- package/.agent/skills/web-pentest/templates/authorization.md +69 -0
- package/.agent/skills/web-pentest/templates/pentest-report.md +178 -0
- package/.claude/commands/mindforge/skill-tdd.md +53 -0
- package/.claude/commands/mindforge/skills-index.md +118 -0
- package/.claude/commands/mindforge/systematic-debug.md +60 -0
- package/.mindforge/config.json +2 -2
- package/.mindforge/memory/sync-manifest.json +1 -1
- package/.mindforge/skills/arxiv/SKILL.md +294 -0
- package/.mindforge/skills/blogwatcher/SKILL.md +147 -0
- package/.mindforge/skills/code-wiki/SKILL.md +457 -0
- package/.mindforge/skills/codebase-inspection/SKILL.md +126 -0
- package/.mindforge/skills/concept-diagrams/SKILL.md +373 -0
- package/.mindforge/skills/creative-ideation/SKILL.md +162 -0
- package/.mindforge/skills/domain-intel/SKILL.md +116 -0
- package/.mindforge/skills/duckduckgo-search/SKILL.md +249 -0
- package/.mindforge/skills/github-code-review/SKILL.md +493 -0
- package/.mindforge/skills/github-issues/SKILL.md +382 -0
- package/.mindforge/skills/github-pr-workflow/SKILL.md +379 -0
- package/.mindforge/skills/jupyter-live-kernel/SKILL.md +179 -0
- package/.mindforge/skills/kanban-orchestrator/SKILL.md +227 -0
- package/.mindforge/skills/kanban-worker/SKILL.md +206 -0
- package/.mindforge/skills/meme-generation/SKILL.md +141 -0
- package/.mindforge/skills/obsidian/SKILL.md +80 -0
- package/.mindforge/skills/osint-investigation/SKILL.md +288 -0
- package/.mindforge/skills/oss-forensics/SKILL.md +421 -0
- package/.mindforge/skills/pixel-art/SKILL.md +228 -0
- package/.mindforge/skills/plan/SKILL.md +350 -0
- package/.mindforge/skills/requesting-code-review/SKILL.md +292 -0
- package/.mindforge/skills/research-paper-writing/SKILL.md +2384 -0
- package/.mindforge/skills/scrapling/SKILL.md +345 -0
- package/.mindforge/skills/sherlock/SKILL.md +203 -0
- package/.mindforge/skills/simplify-code/SKILL.md +187 -0
- package/.mindforge/skills/spike/SKILL.md +209 -0
- package/.mindforge/skills/subagent-driven-development/SKILL.md +364 -0
- package/.mindforge/skills/systematic-debugging/SKILL.md +379 -0
- package/.mindforge/skills/test-driven-development/SKILL.md +355 -0
- package/.mindforge/skills/web-pentest/SKILL.md +327 -0
- package/CHANGELOG.md +88 -0
- package/MINDFORGE.md +3 -3
- package/README.md +38 -3
- package/RELEASENOTES.md +100 -0
- package/bin/dashboard/api-router.js +10 -1
- package/bin/governance/approve.js +5 -1
- package/bin/memory/federated-sync.js +11 -2
- package/bin/memory/knowledge-capture.js +10 -1
- package/bin/memory/pillar-health-tracker.js +9 -1
- package/bin/review/ads-engine.js +2 -2
- package/bin/security/trust-boundaries.js +5 -0
- package/docs/getting-started.md +42 -5
- package/package.json +1 -1
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pixel-art
|
|
3
|
+
description: "Pixel art w/ era palettes (NES, Game Boy, PICO-8)."
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Pixel Art
|
|
8
|
+
|
|
9
|
+
Convert any image into retro pixel art, then optionally animate it into a short
|
|
10
|
+
MP4 or GIF with era-appropriate effects (rain, fireflies, snow, embers).
|
|
11
|
+
|
|
12
|
+
Two scripts ship with this skill:
|
|
13
|
+
|
|
14
|
+
- `scripts/pixel_art.py` — photo → pixel-art PNG (Floyd-Steinberg dithering)
|
|
15
|
+
- `scripts/pixel_art_video.py` — pixel-art PNG → animated MP4 (+ optional GIF)
|
|
16
|
+
|
|
17
|
+
Each is importable or runnable directly. Presets snap to hardware palettes
|
|
18
|
+
when you want era-accurate colors (NES, Game Boy, PICO-8, etc.), or use
|
|
19
|
+
adaptive N-color quantization for arcade/SNES-style looks.
|
|
20
|
+
|
|
21
|
+
## When to Use
|
|
22
|
+
|
|
23
|
+
- User wants retro pixel art from a source image
|
|
24
|
+
- User asks for NES / Game Boy / PICO-8 / C64 / arcade / SNES styling
|
|
25
|
+
- User wants a short looping animation (rain scene, night sky, snow, etc.)
|
|
26
|
+
- Posters, album covers, social posts, sprites, characters, avatars
|
|
27
|
+
|
|
28
|
+
## Workflow
|
|
29
|
+
|
|
30
|
+
Before generating, confirm the style with the user. Different presets produce
|
|
31
|
+
very different outputs and regenerating is costly.
|
|
32
|
+
|
|
33
|
+
### Step 1 — Offer a style
|
|
34
|
+
|
|
35
|
+
Call `clarify` with 4 representative presets. Pick the set based on what the
|
|
36
|
+
user asked for — don't just dump all 14.
|
|
37
|
+
|
|
38
|
+
Default menu when the user's intent is unclear:
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
clarify(
|
|
42
|
+
question="Which pixel-art style do you want?",
|
|
43
|
+
choices=[
|
|
44
|
+
"arcade — bold, chunky 80s cabinet feel (16 colors, 8px)",
|
|
45
|
+
"nes — Nintendo 8-bit hardware palette (54 colors, 8px)",
|
|
46
|
+
"gameboy — 4-shade green Game Boy DMG",
|
|
47
|
+
"snes — cleaner 16-bit look (32 colors, 4px)",
|
|
48
|
+
],
|
|
49
|
+
)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
When the user already named an era (e.g. "80s arcade", "Gameboy"), skip
|
|
53
|
+
`clarify` and use the matching preset directly.
|
|
54
|
+
|
|
55
|
+
### Step 2 — Offer animation (optional)
|
|
56
|
+
|
|
57
|
+
If the user asked for a video/GIF, or the output might benefit from motion,
|
|
58
|
+
ask which scene:
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
clarify(
|
|
62
|
+
question="Want to animate it? Pick a scene or skip.",
|
|
63
|
+
choices=[
|
|
64
|
+
"night — stars + fireflies + leaves",
|
|
65
|
+
"urban — rain + neon pulse",
|
|
66
|
+
"snow — falling snowflakes",
|
|
67
|
+
"skip — just the image",
|
|
68
|
+
],
|
|
69
|
+
)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Do NOT call `clarify` more than twice in a row. One for style, one for scene if
|
|
73
|
+
animation is on the table. If the user explicitly asked for a specific style
|
|
74
|
+
and scene in their message, skip `clarify` entirely.
|
|
75
|
+
|
|
76
|
+
### Step 3 — Generate
|
|
77
|
+
|
|
78
|
+
Run `pixel_art()` first; if animation was requested, chain into
|
|
79
|
+
`pixel_art_video()` on the result.
|
|
80
|
+
|
|
81
|
+
## Preset Catalog
|
|
82
|
+
|
|
83
|
+
| Preset | Era | Palette | Block | Best for |
|
|
84
|
+
|--------|-----|---------|-------|----------|
|
|
85
|
+
| `arcade` | 80s arcade | adaptive 16 | 8px | Bold posters, hero art |
|
|
86
|
+
| `snes` | 16-bit | adaptive 32 | 4px | Characters, detailed scenes |
|
|
87
|
+
| `nes` | 8-bit | NES (54) | 8px | True NES look |
|
|
88
|
+
| `gameboy` | DMG handheld | 4 green shades | 8px | Monochrome Game Boy |
|
|
89
|
+
| `gameboy_pocket` | Pocket handheld | 4 grey shades | 8px | Mono GB Pocket |
|
|
90
|
+
| `pico8` | PICO-8 | 16 fixed | 6px | Fantasy-console look |
|
|
91
|
+
| `c64` | Commodore 64 | 16 fixed | 8px | 8-bit home computer |
|
|
92
|
+
| `apple2` | Apple II hi-res | 6 fixed | 10px | Extreme retro, 6 colors |
|
|
93
|
+
| `teletext` | BBC Teletext | 8 pure | 10px | Chunky primary colors |
|
|
94
|
+
| `mspaint` | Windows MS Paint | 24 fixed | 8px | Nostalgic desktop |
|
|
95
|
+
| `mono_green` | CRT phosphor | 2 green | 6px | Terminal/CRT aesthetic |
|
|
96
|
+
| `mono_amber` | CRT amber | 2 amber | 6px | Amber monitor look |
|
|
97
|
+
| `neon` | Cyberpunk | 10 neons | 6px | Vaporwave/cyber |
|
|
98
|
+
| `pastel` | Soft pastel | 10 pastels | 6px | Kawaii / gentle |
|
|
99
|
+
|
|
100
|
+
Named palettes live in `scripts/palettes.py` (see `references/palettes.md` for
|
|
101
|
+
the complete list — 28 named palettes total). Any preset can be overridden:
|
|
102
|
+
|
|
103
|
+
```python
|
|
104
|
+
pixel_art("in.png", "out.png", preset="snes", palette="PICO_8", block=6)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Scene Catalog (for video)
|
|
108
|
+
|
|
109
|
+
| Scene | Effects |
|
|
110
|
+
|-------|---------|
|
|
111
|
+
| `night` | Twinkling stars + fireflies + drifting leaves |
|
|
112
|
+
| `dusk` | Fireflies + sparkles |
|
|
113
|
+
| `tavern` | Dust motes + warm sparkles |
|
|
114
|
+
| `indoor` | Dust motes |
|
|
115
|
+
| `urban` | Rain + neon pulse |
|
|
116
|
+
| `nature` | Leaves + fireflies |
|
|
117
|
+
| `magic` | Sparkles + fireflies |
|
|
118
|
+
| `storm` | Rain + lightning |
|
|
119
|
+
| `underwater` | Bubbles + light sparkles |
|
|
120
|
+
| `fire` | Embers + sparkles |
|
|
121
|
+
| `snow` | Snowflakes + sparkles |
|
|
122
|
+
| `desert` | Heat shimmer + dust |
|
|
123
|
+
|
|
124
|
+
## Invocation Patterns
|
|
125
|
+
|
|
126
|
+
### Python (import)
|
|
127
|
+
|
|
128
|
+
```python
|
|
129
|
+
import sys
|
|
130
|
+
sys.path.insert(0, "/home/teknium/.hermes/skills/creative/pixel-art/scripts")
|
|
131
|
+
from pixel_art import pixel_art
|
|
132
|
+
from pixel_art_video import pixel_art_video
|
|
133
|
+
|
|
134
|
+
# 1. Convert to pixel art
|
|
135
|
+
pixel_art("/path/to/photo.jpg", "/tmp/pixel.png", preset="nes")
|
|
136
|
+
|
|
137
|
+
# 2. Animate (optional)
|
|
138
|
+
pixel_art_video(
|
|
139
|
+
"/tmp/pixel.png",
|
|
140
|
+
"/tmp/pixel.mp4",
|
|
141
|
+
scene="night",
|
|
142
|
+
duration=6,
|
|
143
|
+
fps=15,
|
|
144
|
+
seed=42,
|
|
145
|
+
export_gif=True,
|
|
146
|
+
)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### CLI
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
cd /home/teknium/.hermes/skills/creative/pixel-art/scripts
|
|
153
|
+
|
|
154
|
+
python pixel_art.py in.jpg out.png --preset gameboy
|
|
155
|
+
python pixel_art.py in.jpg out.png --preset snes --palette PICO_8 --block 6
|
|
156
|
+
|
|
157
|
+
python pixel_art_video.py out.png out.mp4 --scene night --duration 6 --gif
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Pipeline Rationale
|
|
161
|
+
|
|
162
|
+
**Pixel conversion:**
|
|
163
|
+
1. Boost contrast/color/sharpness (stronger for smaller palettes)
|
|
164
|
+
2. Posterize to simplify tonal regions before quantization
|
|
165
|
+
3. Downscale by `block` with `Image.NEAREST` (hard pixels, no interpolation)
|
|
166
|
+
4. Quantize with Floyd-Steinberg dithering — against either an adaptive
|
|
167
|
+
N-color palette OR a named hardware palette
|
|
168
|
+
5. Upscale back with `Image.NEAREST`
|
|
169
|
+
|
|
170
|
+
Quantizing AFTER downscale keeps dithering aligned with the final pixel grid.
|
|
171
|
+
Quantizing before would waste error-diffusion on detail that disappears.
|
|
172
|
+
|
|
173
|
+
**Video overlay:**
|
|
174
|
+
- Copies the base frame each tick (static background)
|
|
175
|
+
- Overlays stateless-per-frame particle draws (one function per effect)
|
|
176
|
+
- Encodes via ffmpeg `libx264 -pix_fmt yuv420p -crf 18`
|
|
177
|
+
- Optional GIF via `palettegen` + `paletteuse`
|
|
178
|
+
|
|
179
|
+
## Dependencies
|
|
180
|
+
|
|
181
|
+
- Python 3.9+
|
|
182
|
+
- Pillow (`pip install Pillow`)
|
|
183
|
+
- ffmpeg on PATH (only needed for video — the agent installs package this)
|
|
184
|
+
|
|
185
|
+
## Pitfalls
|
|
186
|
+
|
|
187
|
+
- Pallet keys are case-sensitive (`"NES"`, `"PICO_8"`, `"GAMEBOY_ORIGINAL"`).
|
|
188
|
+
- Very small sources (<100px wide) collapse under 8-10px blocks. Upscale the
|
|
189
|
+
source first if it's tiny.
|
|
190
|
+
- Fractional `block` or `palette` will break quantization — keep them positive ints.
|
|
191
|
+
- Animation particle counts are tuned for ~640x480 canvases. On very large
|
|
192
|
+
images you may want a second pass with a different seed for density.
|
|
193
|
+
- `mono_green` / `mono_amber` force `color=0.0` (desaturate). If you override
|
|
194
|
+
and keep chroma, the 2-color palette can produce stripes on smooth regions.
|
|
195
|
+
- `clarify` loop: call it at most twice per turn (style, then scene). Don't
|
|
196
|
+
pepper the user with more picks.
|
|
197
|
+
|
|
198
|
+
## Verification
|
|
199
|
+
|
|
200
|
+
- PNG is created at the output path
|
|
201
|
+
- Clear square pixel blocks visible at the preset's block size
|
|
202
|
+
- Color count matches preset (eyeball the image or run `Image.open(p).getcolors()`)
|
|
203
|
+
- Video is a valid MP4 (`ffprobe` can open it) with non-zero size
|
|
204
|
+
|
|
205
|
+
## Attribution
|
|
206
|
+
|
|
207
|
+
Named hardware palettes and the procedural animation loops in `pixel_art_video.py`
|
|
208
|
+
are ported from [pixel-art-studio](https://github.com/Synero/pixel-art-studio)
|
|
209
|
+
(MIT). See `ATTRIBUTION.md` in this skill directory for details.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Named Palettes
|
|
2
|
+
|
|
3
|
+
28 hardware-accurate and artistic palettes available to `pixel_art()`.
|
|
4
|
+
Palette values are sourced from `pixel-art-studio` (MIT) — see ATTRIBUTION.md in the skill root.
|
|
5
|
+
|
|
6
|
+
Usage: pass the palette name as `palette=` or let a preset select it.
|
|
7
|
+
|
|
8
|
+
```python
|
|
9
|
+
pixel_art("in.png", "out.png", preset="nes") # preset selects NES
|
|
10
|
+
pixel_art("in.png", "out.png", preset="custom", palette="PICO_8", block=6)
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Hardware Palettes
|
|
14
|
+
|
|
15
|
+
| Name | Colors | Source |
|
|
16
|
+
|------|--------|--------|
|
|
17
|
+
| `NES` | 54 | Nintendo NES |
|
|
18
|
+
| `C64` | 16 | Commodore 64 |
|
|
19
|
+
| `COMMODORE_64` | 16 | Commodore 64 (alt) |
|
|
20
|
+
| `ZX_SPECTRUM` | 8 | Sinclair ZX Spectrum |
|
|
21
|
+
| `APPLE_II_LO` | 16 | Apple II lo-res |
|
|
22
|
+
| `APPLE_II_HI` | 6 | Apple II hi-res |
|
|
23
|
+
| `GAMEBOY_ORIGINAL` | 4 | Game Boy DMG (green) |
|
|
24
|
+
| `GAMEBOY_POCKET` | 4 | Game Boy Pocket (grey) |
|
|
25
|
+
| `GAMEBOY_VIRTUALBOY` | 4 | Virtual Boy (red) |
|
|
26
|
+
| `PICO_8` | 16 | PICO-8 fantasy console |
|
|
27
|
+
| `TELETEXT` | 8 | BBC Teletext |
|
|
28
|
+
| `CGA_MODE4_PAL1` | 4 | IBM CGA |
|
|
29
|
+
| `MSX` | 15 | MSX |
|
|
30
|
+
| `MICROSOFT_WINDOWS_16` | 16 | Windows 3.x default |
|
|
31
|
+
| `MICROSOFT_WINDOWS_PAINT` | 24 | MS Paint classic |
|
|
32
|
+
| `MONO_BW` | 2 | Black and white |
|
|
33
|
+
| `MONO_AMBER` | 2 | Amber monochrome |
|
|
34
|
+
| `MONO_GREEN` | 2 | Green monochrome |
|
|
35
|
+
|
|
36
|
+
## Artistic Palettes
|
|
37
|
+
|
|
38
|
+
| Name | Colors | Feel |
|
|
39
|
+
|------|--------|------|
|
|
40
|
+
| `PASTEL_DREAM` | 10 | Soft pastels |
|
|
41
|
+
| `NEON_CYBER` | 10 | Cyberpunk neon |
|
|
42
|
+
| `RETRO_WARM` | 10 | Warm 70s |
|
|
43
|
+
| `OCEAN_DEEP` | 10 | Blue gradient |
|
|
44
|
+
| `FOREST_MOSS` | 10 | Green naturals |
|
|
45
|
+
| `SUNSET_FIRE` | 10 | Red to yellow |
|
|
46
|
+
| `ARCTIC_ICE` | 10 | Cool blues and whites |
|
|
47
|
+
| `VINTAGE_ROSE` | 10 | Rose mauves |
|
|
48
|
+
| `EARTH_CLAY` | 10 | Terracotta browns |
|
|
49
|
+
| `ELECTRIC_VIOLET` | 10 | Violet gradient |
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plan
|
|
3
|
+
description: "Plan mode: write an actionable markdown plan to .hermes/plans/, no execution. Bite-sized tasks, exact paths, complete code."
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Plan Mode
|
|
8
|
+
|
|
9
|
+
Use this skill when the user wants a plan instead of execution.
|
|
10
|
+
|
|
11
|
+
## Core behavior
|
|
12
|
+
|
|
13
|
+
For this turn, you are planning only.
|
|
14
|
+
|
|
15
|
+
- Do not implement code.
|
|
16
|
+
- Do not edit project files except the plan markdown file.
|
|
17
|
+
- Do not run mutating terminal commands, commit, push, or perform external actions.
|
|
18
|
+
- You may inspect the repo or other context with read-only commands/tools when needed.
|
|
19
|
+
- Your deliverable is a markdown plan saved inside the active workspace under `.hermes/plans/`.
|
|
20
|
+
|
|
21
|
+
## Output requirements
|
|
22
|
+
|
|
23
|
+
Write a markdown plan that is concrete and actionable.
|
|
24
|
+
|
|
25
|
+
Include, when relevant:
|
|
26
|
+
- Goal
|
|
27
|
+
- Current context / assumptions
|
|
28
|
+
- Proposed approach
|
|
29
|
+
- Step-by-step plan
|
|
30
|
+
- Files likely to change
|
|
31
|
+
- Tests / validation
|
|
32
|
+
- Risks, tradeoffs, and open questions
|
|
33
|
+
|
|
34
|
+
If the task is code-related, include exact file paths, likely test targets, and verification steps.
|
|
35
|
+
|
|
36
|
+
## Save location
|
|
37
|
+
|
|
38
|
+
Save the plan with `write_file` under:
|
|
39
|
+
- `.hermes/plans/YYYY-MM-DD_HHMMSS-<slug>.md`
|
|
40
|
+
|
|
41
|
+
Treat that as relative to the active working directory / backend workspace. the agent file tools are backend-aware, so using this relative path keeps the plan with the workspace on local, docker, ssh, modal, and daytona backends.
|
|
42
|
+
|
|
43
|
+
If the runtime provides a specific target path, use that exact path.
|
|
44
|
+
If not, create a sensible timestamped filename yourself under `.hermes/plans/`.
|
|
45
|
+
|
|
46
|
+
## Interaction style
|
|
47
|
+
|
|
48
|
+
- If the request is clear enough, write the plan directly.
|
|
49
|
+
- If no explicit instruction accompanies `/plan`, infer the task from the current conversation context.
|
|
50
|
+
- If it is genuinely underspecified, ask a brief clarifying question instead of guessing.
|
|
51
|
+
- After saving the plan, reply briefly with what you planned and the saved path.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
# Writing the Plan Well
|
|
56
|
+
|
|
57
|
+
The rest of this skill is the craft of authoring a *good* implementation plan — the content that goes inside the markdown file above.
|
|
58
|
+
|
|
59
|
+
## Overview
|
|
60
|
+
|
|
61
|
+
Write comprehensive implementation plans assuming the implementer has zero context for the codebase and questionable taste. Document everything they need: which files to touch, complete code, testing commands, docs to check, how to verify. Give them bite-sized tasks. DRY. YAGNI. TDD. Frequent commits.
|
|
62
|
+
|
|
63
|
+
Assume the implementer is a skilled developer but knows almost nothing about the toolset or problem domain. Assume they don't know good test design very well.
|
|
64
|
+
|
|
65
|
+
**Core principle:** A good plan makes implementation obvious. If someone has to guess, the plan is incomplete.
|
|
66
|
+
|
|
67
|
+
## When a Full Implementation Plan Helps
|
|
68
|
+
|
|
69
|
+
**Always use before:**
|
|
70
|
+
- Implementing multi-step features
|
|
71
|
+
- Breaking down complex requirements
|
|
72
|
+
- Delegating to subagents via subagent-driven-development
|
|
73
|
+
|
|
74
|
+
**Don't skip when:**
|
|
75
|
+
- Feature seems simple (assumptions cause bugs)
|
|
76
|
+
- You plan to implement it yourself (future you needs guidance)
|
|
77
|
+
- Working alone (documentation matters)
|
|
78
|
+
|
|
79
|
+
## Bite-Sized Task Granularity
|
|
80
|
+
|
|
81
|
+
**Each task = 2-5 minutes of focused work.**
|
|
82
|
+
|
|
83
|
+
Every step is one action:
|
|
84
|
+
- "Write the failing test" — step
|
|
85
|
+
- "Run it to make sure it fails" — step
|
|
86
|
+
- "Implement the minimal code to make the test pass" — step
|
|
87
|
+
- "Run the tests and make sure they pass" — step
|
|
88
|
+
- "Commit" — step
|
|
89
|
+
|
|
90
|
+
**Too big:**
|
|
91
|
+
```markdown
|
|
92
|
+
### Task 1: Build authentication system
|
|
93
|
+
[50 lines of code across 5 files]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Right size:**
|
|
97
|
+
```markdown
|
|
98
|
+
### Task 1: Create User model with email field
|
|
99
|
+
[10 lines, 1 file]
|
|
100
|
+
|
|
101
|
+
### Task 2: Add password hash field to User
|
|
102
|
+
[8 lines, 1 file]
|
|
103
|
+
|
|
104
|
+
### Task 3: Create password hashing utility
|
|
105
|
+
[15 lines, 1 file]
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Plan Document Structure
|
|
109
|
+
|
|
110
|
+
### Header (Required)
|
|
111
|
+
|
|
112
|
+
Every plan MUST start with:
|
|
113
|
+
|
|
114
|
+
```markdown
|
|
115
|
+
# [Feature Name] Implementation Plan
|
|
116
|
+
|
|
117
|
+
> **For the agent:** Use subagent-driven-development skill to implement this plan task-by-task.
|
|
118
|
+
|
|
119
|
+
**Goal:** [One sentence describing what this builds]
|
|
120
|
+
|
|
121
|
+
**Architecture:** [2-3 sentences about approach]
|
|
122
|
+
|
|
123
|
+
**Tech Stack:** [Key technologies/libraries]
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Task Structure
|
|
129
|
+
|
|
130
|
+
Each task follows this format:
|
|
131
|
+
|
|
132
|
+
````markdown
|
|
133
|
+
### Task N: [Descriptive Name]
|
|
134
|
+
|
|
135
|
+
**Objective:** What this task accomplishes (one sentence)
|
|
136
|
+
|
|
137
|
+
**Files:**
|
|
138
|
+
- Create: `exact/path/to/new_file.py`
|
|
139
|
+
- Modify: `exact/path/to/existing.py:45-67` (line numbers if known)
|
|
140
|
+
- Test: `tests/path/to/test_file.py`
|
|
141
|
+
|
|
142
|
+
**Step 1: Write failing test**
|
|
143
|
+
|
|
144
|
+
```python
|
|
145
|
+
def test_specific_behavior():
|
|
146
|
+
result = function(input)
|
|
147
|
+
assert result == expected
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Step 2: Run test to verify failure**
|
|
151
|
+
|
|
152
|
+
Run: `pytest tests/path/test.py::test_specific_behavior -v`
|
|
153
|
+
Expected: FAIL — "function not defined"
|
|
154
|
+
|
|
155
|
+
**Step 3: Write minimal implementation**
|
|
156
|
+
|
|
157
|
+
```python
|
|
158
|
+
def function(input):
|
|
159
|
+
return expected
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Step 4: Run test to verify pass**
|
|
163
|
+
|
|
164
|
+
Run: `pytest tests/path/test.py::test_specific_behavior -v`
|
|
165
|
+
Expected: PASS
|
|
166
|
+
|
|
167
|
+
**Step 5: Commit**
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
git add tests/path/test.py src/path/file.py
|
|
171
|
+
git commit -m "feat: add specific feature"
|
|
172
|
+
```
|
|
173
|
+
````
|
|
174
|
+
|
|
175
|
+
## Writing Process
|
|
176
|
+
|
|
177
|
+
### Step 1: Understand Requirements
|
|
178
|
+
|
|
179
|
+
Read and understand:
|
|
180
|
+
- Feature requirements
|
|
181
|
+
- Design documents or user description
|
|
182
|
+
- Acceptance criteria
|
|
183
|
+
- Constraints
|
|
184
|
+
|
|
185
|
+
### Step 2: Explore the Codebase
|
|
186
|
+
|
|
187
|
+
Use tools to understand the project:
|
|
188
|
+
|
|
189
|
+
```python
|
|
190
|
+
# Understand project structure
|
|
191
|
+
search_files("*.py", target="files", path="src/")
|
|
192
|
+
|
|
193
|
+
# Look at similar features
|
|
194
|
+
search_files("similar_pattern", path="src/", file_glob="*.py")
|
|
195
|
+
|
|
196
|
+
# Check existing tests
|
|
197
|
+
search_files("*.py", target="files", path="tests/")
|
|
198
|
+
|
|
199
|
+
# Read key files
|
|
200
|
+
read_file("src/app.py")
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Step 3: Design Approach
|
|
204
|
+
|
|
205
|
+
Decide:
|
|
206
|
+
- Architecture pattern
|
|
207
|
+
- File organization
|
|
208
|
+
- Dependencies needed
|
|
209
|
+
- Testing strategy
|
|
210
|
+
|
|
211
|
+
### Step 4: Write Tasks
|
|
212
|
+
|
|
213
|
+
Create tasks in order:
|
|
214
|
+
1. Setup/infrastructure
|
|
215
|
+
2. Core functionality (TDD for each)
|
|
216
|
+
3. Edge cases
|
|
217
|
+
4. Integration
|
|
218
|
+
5. Cleanup/documentation
|
|
219
|
+
|
|
220
|
+
### Step 5: Add Complete Details
|
|
221
|
+
|
|
222
|
+
For each task, include:
|
|
223
|
+
- **Exact file paths** (not "the config file" but `src/config/settings.py`)
|
|
224
|
+
- **Complete code examples** (not "add validation" but the actual code)
|
|
225
|
+
- **Exact commands** with expected output
|
|
226
|
+
- **Verification steps** that prove the task works
|
|
227
|
+
|
|
228
|
+
### Step 6: Review the Plan
|
|
229
|
+
|
|
230
|
+
Check:
|
|
231
|
+
- [ ] Tasks are sequential and logical
|
|
232
|
+
- [ ] Each task is bite-sized (2-5 min)
|
|
233
|
+
- [ ] File paths are exact
|
|
234
|
+
- [ ] Code examples are complete (copy-pasteable)
|
|
235
|
+
- [ ] Commands are exact with expected output
|
|
236
|
+
- [ ] No missing context
|
|
237
|
+
- [ ] DRY, YAGNI, TDD principles applied
|
|
238
|
+
|
|
239
|
+
## Principles
|
|
240
|
+
|
|
241
|
+
### DRY (Don't Repeat Yourself)
|
|
242
|
+
|
|
243
|
+
**Bad:** Copy-paste validation in 3 places
|
|
244
|
+
**Good:** Extract validation function, use everywhere
|
|
245
|
+
|
|
246
|
+
### YAGNI (You Aren't Gonna Need It)
|
|
247
|
+
|
|
248
|
+
**Bad:** Add "flexibility" for future requirements
|
|
249
|
+
**Good:** Implement only what's needed now
|
|
250
|
+
|
|
251
|
+
```python
|
|
252
|
+
# Bad — YAGNI violation
|
|
253
|
+
class User:
|
|
254
|
+
def __init__(self, name, email):
|
|
255
|
+
self.name = name
|
|
256
|
+
self.email = email
|
|
257
|
+
self.preferences = {} # Not needed yet!
|
|
258
|
+
self.metadata = {} # Not needed yet!
|
|
259
|
+
|
|
260
|
+
# Good — YAGNI
|
|
261
|
+
class User:
|
|
262
|
+
def __init__(self, name, email):
|
|
263
|
+
self.name = name
|
|
264
|
+
self.email = email
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### TDD (Test-Driven Development)
|
|
268
|
+
|
|
269
|
+
Every task that produces code should include the full TDD cycle:
|
|
270
|
+
1. Write failing test
|
|
271
|
+
2. Run to verify failure
|
|
272
|
+
3. Write minimal code
|
|
273
|
+
4. Run to verify pass
|
|
274
|
+
|
|
275
|
+
See `test-driven-development` skill for details.
|
|
276
|
+
|
|
277
|
+
### Frequent Commits
|
|
278
|
+
|
|
279
|
+
Commit after every task:
|
|
280
|
+
```bash
|
|
281
|
+
git add [files]
|
|
282
|
+
git commit -m "type: description"
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## Common Mistakes
|
|
286
|
+
|
|
287
|
+
### Vague Tasks
|
|
288
|
+
|
|
289
|
+
**Bad:** "Add authentication"
|
|
290
|
+
**Good:** "Create User model with email and password_hash fields"
|
|
291
|
+
|
|
292
|
+
### Incomplete Code
|
|
293
|
+
|
|
294
|
+
**Bad:** "Step 1: Add validation function"
|
|
295
|
+
**Good:** "Step 1: Add validation function" followed by the complete function code
|
|
296
|
+
|
|
297
|
+
### Missing Verification
|
|
298
|
+
|
|
299
|
+
**Bad:** "Step 3: Test it works"
|
|
300
|
+
**Good:** "Step 3: Run `pytest tests/test_auth.py -v`, expected: 3 passed"
|
|
301
|
+
|
|
302
|
+
### Missing File Paths
|
|
303
|
+
|
|
304
|
+
**Bad:** "Create the model file"
|
|
305
|
+
**Good:** "Create: `src/models/user.py`"
|
|
306
|
+
|
|
307
|
+
## Execution Handoff
|
|
308
|
+
|
|
309
|
+
After saving the plan, offer the execution approach:
|
|
310
|
+
|
|
311
|
+
**"Plan complete and saved. Ready to execute using subagent-driven-development — I'll dispatch a fresh subagent per task with two-stage review (spec compliance then code quality). Shall I proceed?"**
|
|
312
|
+
|
|
313
|
+
When executing, use the `subagent-driven-development` skill:
|
|
314
|
+
- Fresh `delegate_task` per task with full context
|
|
315
|
+
- Spec compliance review after each task
|
|
316
|
+
- Code quality review after spec passes
|
|
317
|
+
- Proceed only when both reviews approve
|
|
318
|
+
|
|
319
|
+
## Remember
|
|
320
|
+
|
|
321
|
+
```
|
|
322
|
+
Bite-sized tasks (2-5 min each)
|
|
323
|
+
Exact file paths
|
|
324
|
+
Complete code (copy-pasteable)
|
|
325
|
+
Exact commands with expected output
|
|
326
|
+
Verification steps
|
|
327
|
+
DRY, YAGNI, TDD
|
|
328
|
+
Frequent commits
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
**A good plan makes implementation obvious.**
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: polymarket
|
|
3
|
+
description: "Query Polymarket: markets, prices, orderbooks, history."
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags: [polymarket, prediction-markets, market-data, trading]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Polymarket — Prediction Market Data
|
|
9
|
+
|
|
10
|
+
Query prediction market data from Polymarket using their public REST APIs.
|
|
11
|
+
All endpoints are read-only and require zero authentication.
|
|
12
|
+
|
|
13
|
+
See `references/api-endpoints.md` for the full endpoint reference with curl examples.
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- User asks about prediction markets, betting odds, or event probabilities
|
|
18
|
+
- User wants to know "what are the odds of X happening?"
|
|
19
|
+
- User asks about Polymarket specifically
|
|
20
|
+
- User wants market prices, orderbook data, or price history
|
|
21
|
+
- User asks to monitor or track prediction market movements
|
|
22
|
+
|
|
23
|
+
## Key Concepts
|
|
24
|
+
|
|
25
|
+
- **Events** contain one or more **Markets** (1:many relationship)
|
|
26
|
+
- **Markets** are binary outcomes with Yes/No prices between 0.00 and 1.00
|
|
27
|
+
- Prices ARE probabilities: price 0.65 means the market thinks 65% likely
|
|
28
|
+
- `outcomePrices` field: JSON-encoded array like `["0.80", "0.20"]`
|
|
29
|
+
- `clobTokenIds` field: JSON-encoded array of two token IDs [Yes, No] for price/book queries
|
|
30
|
+
- `conditionId` field: hex string used for price history queries
|
|
31
|
+
- Volume is in USDC (US dollars)
|
|
32
|
+
|
|
33
|
+
## Three Public APIs
|
|
34
|
+
|
|
35
|
+
1. **Gamma API** at `gamma-api.polymarket.com` — Discovery, search, browsing
|
|
36
|
+
2. **CLOB API** at `clob.polymarket.com` — Real-time prices, orderbooks, history
|
|
37
|
+
3. **Data API** at `data-api.polymarket.com` — Trades, open interest
|
|
38
|
+
|
|
39
|
+
## Typical Workflow
|
|
40
|
+
|
|
41
|
+
When a user asks about prediction market odds:
|
|
42
|
+
|
|
43
|
+
1. **Search** using the Gamma API public-search endpoint with their query
|
|
44
|
+
2. **Parse** the response — extract events and their nested markets
|
|
45
|
+
3. **Present** market question, current prices as percentages, and volume
|
|
46
|
+
4. **Deep dive** if asked — use clobTokenIds for orderbook, conditionId for history
|
|
47
|
+
|
|
48
|
+
## Presenting Results
|
|
49
|
+
|
|
50
|
+
Format prices as percentages for readability:
|
|
51
|
+
- outcomePrices `["0.652", "0.348"]` becomes "Yes: 65.2%, No: 34.8%"
|
|
52
|
+
- Always show the market question and probability
|
|
53
|
+
- Include volume when available
|
|
54
|
+
|
|
55
|
+
Example: `"Will X happen?" — 65.2% Yes ($1.2M volume)`
|
|
56
|
+
|
|
57
|
+
## Parsing Double-Encoded Fields
|
|
58
|
+
|
|
59
|
+
The Gamma API returns `outcomePrices`, `outcomes`, and `clobTokenIds` as JSON strings
|
|
60
|
+
inside JSON responses (double-encoded). When processing with Python, parse them with
|
|
61
|
+
`json.loads(market['outcomePrices'])` to get the actual array.
|
|
62
|
+
|
|
63
|
+
## Rate Limits
|
|
64
|
+
|
|
65
|
+
Generous — unlikely to hit for normal usage:
|
|
66
|
+
- Gamma: 4,000 requests per 10 seconds (general)
|
|
67
|
+
- CLOB: 9,000 requests per 10 seconds (general)
|
|
68
|
+
- Data: 1,000 requests per 10 seconds (general)
|
|
69
|
+
|
|
70
|
+
## Limitations
|
|
71
|
+
|
|
72
|
+
- This skill is read-only — it does not support placing trades
|
|
73
|
+
- Trading requires wallet-based crypto authentication (EIP-712 signatures)
|
|
74
|
+
- Some new markets may have empty price history
|
|
75
|
+
- Geographic restrictions apply to trading but read-only data is globally accessible
|