Vercel Composition Patterns
supabase/supabase
React composition patterns that scale. An agent skill from supabase/supabase.
Write synthesisable Verilog-2005 for an iCE40 FPGA and take it to a bitstream — the language subset that synthesises, the testbench shape the pane draws waves from, the iCEBreaker pinout, how to…
$ npx skills add autonomous-ai/openharness --skill yosys -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install autonomous-ai/openharness yosys --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/autonomous-ai/openharness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/store/agents/yosys/skills/yosys .claude/skills/yosys && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "yosys" agent skill from https://github.com/autonomous-ai/openharness/tree/main/store/agents/yosys/skills/yosys into .claude/skills/yosys/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yosys", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/autonomous-ai/openharness/tree/main/store/agents/yosys/skills/yosysType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add autonomous-ai/openharness --skill yosys -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install autonomous-ai/openharness yosys --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/autonomous-ai/openharness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/store/agents/yosys/skills/yosys .agents/skills/yosys && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "yosys" agent skill from https://github.com/autonomous-ai/openharness/tree/main/store/agents/yosys/skills/yosys into .agents/skills/yosys/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yosys", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add autonomous-ai/openharness --skill yosys -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install autonomous-ai/openharness yosys --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/autonomous-ai/openharness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/store/agents/yosys/skills/yosys .cursor/skills/yosys && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "yosys" agent skill from https://github.com/autonomous-ai/openharness/tree/main/store/agents/yosys/skills/yosys into .cursor/skills/yosys/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yosys", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/autonomous-ai/openharness.git --path store/agents/yosys/skills/yosys--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add autonomous-ai/openharness --skill yosys -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install autonomous-ai/openharness yosys --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/autonomous-ai/openharness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/store/agents/yosys/skills/yosys .gemini/skills/yosys && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "yosys" agent skill from https://github.com/autonomous-ai/openharness/tree/main/store/agents/yosys/skills/yosys into .gemini/skills/yosys/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yosys", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install autonomous-ai/openharness yosysInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add autonomous-ai/openharness --skill yosys -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/autonomous-ai/openharness.git skills-src && mkdir -p .github/skills && cp -r skills-src/store/agents/yosys/skills/yosys .github/skills/yosys && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "yosys" agent skill from https://github.com/autonomous-ai/openharness/tree/main/store/agents/yosys/skills/yosys into .github/skills/yosys/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yosys", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add autonomous-ai/openharness --skill yosys -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install autonomous-ai/openharness yosys --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/autonomous-ai/openharness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/store/agents/yosys/skills/yosys .opencode/skills/yosys && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "yosys" agent skill from https://github.com/autonomous-ai/openharness/tree/main/store/agents/yosys/skills/yosys into .opencode/skills/yosys/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "yosys", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
yosysWrite synthesisable Verilog-2005 for an iCE40 FPGA and take it to a bitstream — the language subset that synthesises, the testbench shape the pane draws waves from, the iCEBreaker pinout, how to…
Yosys is an agent skill from autonomous-ai/openharness. Write synthesisable Verilog-2005 for an iCE40 FPGA and take it to a bitstream — the language subset that synthesises, the testbench shape the pane draws waves from, the iCEBreaker pinout, how to read the utilisation and Fmax report, the mistakes that cost you a day (inferred latches, multi-driven nets, blocking assignments in sequential logic, missing reset), and ready-made UART / PWM / debounce blocks. Use whenever writing, simulating, synthesising or debugging RTL in this workspace.
Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development. The repository describes itself as: The ultimate harness for coding agents and beyond. All your agents. All your machines. One command center. Start with code, then follow your curiosity and build across… The licence is MIT.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 74c2733. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are verilog and bash).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
codeberg.orgFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Yosys loads about 4k tokens when it runs. Until then it costs about 124 tokens; SKILL.md has 1,383 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from autonomous-ai/openharness at commit 74c2733, republished under its MIT licence (© autonomous-ai). 1,383 words, ~3,970 tokens.
.claude/skills/yosys/SKILL.md (or your agent's skills folder).Six tools, one command, and a strict subset of one language. Everything below is what actually passes through Icarus Verilog, Yosys, nextpnr and icepack — not what the standard permits.
"$YOSYS_FLOW" blink # the whole thing, for top module `blink`| step | tool | in | out |
|---|---|---|---|
| sim | iverilog -g2012 + vvp | rtl/*.v + tb/blink_tb.v | out/sim.vcd, PASS/FAIL on stdout |
| waves | vcd2json.py | out/sim.vcd | out/waves.json — a signal summary for the verdict (the pane reads the VCD itself) |
| synth | yosys synth_ice40 | rtl/*.v | out/blink.json — the iCE40 netlist, and cell counts |
| schematic | yosys prep | rtl/*.v | out/blink_schematic.json — technology-independent |
| svg | netlistsvg | that JSON | out/blink.svg — the top module drawn (the pane draws every module of the hierarchy) |
| pnr | nextpnr-ice40 --up5k --package sg48 | netlist + constraints/blink.pcf | out/blink.asc, out/blink_pnr.json (utilisation, Fmax, critical paths), out/blink_routed.json (placement and routing — the pane's floorplan) |
| pack | icepack | .asc | out/blink.bin — the bitstream |
Each step's full output is at out/logs/<step>.log, with <step>.start, <step>.time and
<step>.exit beside it and out/logs/run.json for the run as a whole — the pane reads those to show
which step is running. The flow does not stop the world on a failure: synthesis still runs when
simulation fails, so you see every problem at once.
Single steps, when you are iterating on one thing — through "$YOSYS_TOOLCHAIN/run", which finds
the tools the way the flow does (they need not be on your PATH):
# just the simulation
"$YOSYS_TOOLCHAIN/run" iverilog -g2012 -o out/sim.vvp rtl/*.v tb/blink_tb.v && "$YOSYS_TOOLCHAIN/run" vvp out/sim.vvp
# just the cell count
"$YOSYS_TOOLCHAIN/run" yosys -p "read_verilog rtl/*.v; synth_ice40 -top blink; stat"Then always finish with the full "$YOSYS_FLOW" <top> so the pane and the verdict are current.
Yosys turns a description of hardware into gates. Anything that does not describe hardware is either rejected or, worse, quietly turned into something you did not mean.
Always
`default_nettype none // first line of every file: an undeclared name is now an error,
// not a silent 1-bit wire. This catches every typo'd port.
module counter #(
parameter integer WIDTH = 8 // parameters, not `define — they are per-instance
) (
input wire clk,
input wire rst,
input wire en,
output reg [WIDTH-1:0] count // a port assigned in an always block is `reg`
);
always @(posedge clk) begin // ONE clock, ONE edge, no other signal in the list
if (rst) count <= {WIDTH{1'b0}};
else if (en) count <= count + 1'b1;
end
endmodule
`default_nettype wire // last line: put it back, so other files are not surprisedRules that are not negotiable:
<= in always @(posedge clk), = in always @(*). Non-blocking for flip-flops, blocking
for combinational logic. Mixing them is the single most common source of "it simulates but does
not synthesise the same".always block (or one assign), never two. Two drivers
is an error in synthesis and an x in simulation.always @(*) assigns every output on every path. An if without an else, or a
case without a default, infers a latch — see the pitfalls below.8'd0, 4'b1010, 16'hBEEF, {WIDTH{1'b0}}. A bare 0 is
32 bits and will silently widen an expression.$clog2(N) for a counter's width. It is Verilog-2005 and Yosys supports it.initial blocks for logic (initial values on a reg are fine and do synthesise on iCE40 —
the bitstream sets the flip-flops). No #delays. No fork/join. No while/forever. No
real. for loops only with constant bounds — they unroll into copies of hardware.* by a variable costs a lot
of LUTs (the UP5K has 8 DSP blocks, synth_ice40 -dsp maps to them). Division is not free and
usually means you want a different algorithm.State machines — two blocks, always:
localparam [1:0] IDLE = 2'd0, RUN = 2'd1, DONE = 2'd2;
reg [1:0] state, next;
always @(posedge clk) // the register
if (rst) state <= IDLE; else state <= next;
always @(*) begin // the transition, fully assigned
next = state; // <-- the default that prevents a latch
case (state)
IDLE: if (start) next = RUN;
RUN: if (done) next = DONE;
DONE: next = IDLE;
default: next = IDLE;
endcase
endOne per top module, at tb/<top>_tb.v. The shape matters: the pane draws its waves from the VCD,
and the verdict reads the word FAIL.
`timescale 1ns / 1ps
`default_nettype none
module counter_tb;
reg clk = 1'b0, rst = 1'b1, en = 1'b0;
wire [7:0] count;
integer errors = 0;
counter #(.WIDTH(8)) dut (.clk(clk), .rst(rst), .en(en), .count(count));
always #5 clk = ~clk; // a 100 MHz clock: 10 ns period
task check(input condition, input [8*40-1:0] what); // NOT `expect` — reserved in -g2012
begin
if (condition) $display(" ok %0s", what);
else begin errors = errors + 1; $display(" FAIL %0s (at %0t)", what, $time); end
end
endtask
initial begin
$dumpfile("out/sim.vcd"); // exactly this path — the flow reads it
$dumpvars(0, counter_tb); // 0 = this scope and everything under it
repeat (2) @(posedge clk); rst = 1'b0; en = 1'b1;
repeat (5) @(posedge clk); #1;
check(count == 8'd5, "counts five clocks");
if (errors == 0) $display("PASS counter: %0d checks", 3);
else $display("FAIL counter: %0d check(s) failed", errors);
$finish; // ALWAYS: without it vvp runs forever
end
endmodule#1 after @(posedge clk) before checking. At the edge itself the non-blocking update has
not landed yet; one time unit later it has.CLK_HZ) and override it in the testbench (.CLK_HZ(16)), so the same RTL runs in a
hundred clocks. Never change the RTL to make the test fast.$dumpvars(0, tb) dumps everything including the DUT's internals — that is what you want: the
pane's Waves tab browses every scope, shows parameters with their values, and opens on the DUT's
ports and registers. A line named tx/rx is decoded as UART (baud measured off the line); an
8-bit bus named data/byte/char starts in ASCII. Keep a dump under a few tens of millions of
changes — $dumpoff around a long quiet stretch, as hello_uart-style testbenches do.FAIL anywhere in the output fails the verdict. Do not print it in passing messages.5280 logic cells, 30 × 4 kbit block RAMs, 4 × 16 kB single-port RAMs, 8 DSP blocks, 1 PLL. Pin numbers are the board's, from the iCEBreaker project's own constraints file.
set_io -nowarn clk 35 # 12 MHz oscillator
set_frequency clk 12 # nextpnr's extension: this is what Fmax is measured against
set_io -nowarn btn_n 10 # on-board button — ACTIVE LOW (0 = pressed)
set_io -nowarn ledr_n 11 # red LED — ACTIVE LOW (0 = lit)
set_io -nowarn ledg_n 37 # green LED — ACTIVE LOW (0 = lit)
set_io -nowarn rx 6 # UART from the on-board FTDI (FPGA's point of view)
set_io -nowarn tx 9 # UART to the FTDIThe full board — RGB LED (39/40/41), SPI flash, PMOD 1A/1B/2, and the snap-off section's five
active-high LEDs and three buttons — is commented out in constraints/blink.pcf; uncomment
what you use. -nowarn lets one PCF carry pins the current design does not have.
Every port of the top module needs a set_io line, or nextpnr fails with "unconstrained IO".
Nothing else in the design does; internal signals are routed automatically.
Another board: change constraints/<top>.pcf and set YOSYS_DEVICE / YOSYS_PACKAGE
(e.g. YOSYS_DEVICE=--hx8k YOSYS_PACKAGE=ct256 for the HX8K breakout).
out/<top>.report.json is what the pane draws; read it when you want the numbers in words.
synthesis.byType — what Yosys mapped the design to. SB_LUT4 is a 4-input lookup table,
SB_DFFSR/SB_DFFE are flip-flops, SB_CARRY is the fast carry chain an adder uses,
SB_RAM40_4K is block RAM. Roughly: a logic cell is one LUT4 + one flip-flop, so
ICESTORM_LC ≈ max(LUTs, FFs) after packing, not their sum.pnr.utilization — used / available per resource, with a percentage. Under 70 % is
comfortable; over 90 % and nextpnr starts to struggle to route.pnr.clocks[].achievedMHz vs constraintMHz — the design closes at the first, the PCF's
set_frequency asks for the second. pass: false means the critical path is too long: the fix
is to break it with a pipeline register, not to lower the clock, unless lowering it is honest.
The path itself, hop by hop with the RTL line of each net, is critical_paths in
out/<top>_pnr.json — and drawn on the floorplan in the pane's Chip tab.bitstream.path — out/<top>.bin, and "$YOSYS_TOOLCHAIN/run" iceprog out/<top>.bin flashes
a board over USB (the user needs the board plugged in).Inferred latch. A combinational block that does not assign an output on every path becomes a
level-sensitive latch — which on an FPGA is built out of a LUT feeding itself, is not timed, and
glitches. Yosys says Warning: ... latch and the verdict raises it.
always @(*) if (sel) y = a; // BAD: what is y when sel is 0? A latch.
always @(*) begin y = 1'b0; if (sel) y = a; end // GOOD: a default first.Multi-driven net. Two always blocks (or an always and an assign) writing the same signal.
Simulation shows x, synthesis errors with "conflicting drivers". One signal, one driver.
Blocking assignment in sequential logic. always @(posedge clk) begin a = b; c = a; end makes
one flip-flop and a wire; with <= it makes two flip-flops in a shift register. Simulation and
synthesis can disagree about which you meant. Use <=.
An asynchronous input sampled directly. A button or an incoming UART line is not synchronous to your clock; sampling it straight into logic causes metastability. Two flip-flops first, always:
reg [1:0] sync;
always @(posedge clk) sync <= {sync[0], btn_n};
wire btn_safe = sync[1];Reset that is not thought about. On iCE40 a reg x = 1'b0; initial value is honoured — the
bitstream loads it — so a global reset is often unnecessary. If you do use one, use it
synchronously (if (rst) inside @(posedge clk)) and on every register in the block.
A counter one bit too narrow. reg [7:0] c; if (c == 300) never fires. Size from the constant:
reg [$clog2(LIMIT)-1:0].
Width mismatch. wire [7:0] a = b + c; where b,c are 8-bit silently drops the carry. Widen
first: {1'b0, b} + {1'b0, c}.
$finish missing. vvp runs forever and the flow hangs. Every testbench ends with $finish.
Clock divider / strobe — one cycle high every N clocks, which is how you make anything slow:
localparam integer DIV = CLK_HZ / RATE_HZ;
reg [$clog2(DIV)-1:0] div = 0;
reg tick = 1'b0;
always @(posedge clk) begin
tick <= 1'b0;
if (div == DIV - 1) begin div <= 0; tick <= 1'b1; end
else div <= div + 1'b1;
endPWM — duty out of 2^BITS, no multiplier, one adder:
module pwm #(parameter integer BITS = 8) (
input wire clk, input wire [BITS-1:0] duty, output wire out
);
reg [BITS-1:0] acc = 0;
always @(posedge clk) acc <= acc + 1'b1;
assign out = (acc < duty);
endmodule(For an LED, gamma matters: perceived brightness goes as roughly the square of duty.)
Button debounce — hold the input steady for a few milliseconds before believing it:
module debounce #(parameter integer COUNT = 12_000) ( // 1 ms at 12 MHz
input wire clk, input wire in, output reg out = 1'b0
);
reg [1:0] sync = 2'b00;
reg [$clog2(COUNT)-1:0] n = 0;
always @(posedge clk) begin
sync <= {sync[0], in};
if (sync[1] == out) n <= 0;
else if (n == COUNT - 1) begin out <= sync[1]; n <= 0; end
else n <= n + 1'b1;
end
endmoduleUART transmitter — 8N1, at CLK_HZ / BAUD clocks per bit (12 MHz / 115200 = 104):
module uart_tx #(parameter integer CLK_HZ = 12_000_000, parameter integer BAUD = 115_200) (
input wire clk,
input wire send, // pulse high for one clock
input wire [7:0] data,
output reg tx = 1'b1, // idles high
output wire busy
);
localparam integer DIV = CLK_HZ / BAUD;
reg [$clog2(DIV)-1:0] cnt = 0;
reg [3:0] bit_i = 4'd0; // 0 = idle, 1 = start, 2..9 = data, 10 = stop
reg [7:0] shift = 8'd0;
assign busy = (bit_i != 4'd0);
always @(posedge clk) begin
if (!busy) begin
if (send) begin shift <= data; bit_i <= 4'd1; cnt <= 0; tx <= 1'b0; end
end else if (cnt == DIV - 1) begin
cnt <= 0;
case (bit_i)
4'd10: begin tx <= 1'b1; bit_i <= 4'd0; end // stop bit done
default: begin tx <= shift[0]; shift <= {1'b0, shift[7:1]}; bit_i <= bit_i + 1'b1; end
endcase
if (bit_i == 4'd9) tx <= 1'b1; // the stop bit itself
end else cnt <= cnt + 1'b1;
end
endmoduleTest a UART by counting the bit times in the testbench, not by eye on the waveform.
Block RAM — a plain inferred array; Yosys maps it to SB_RAM40_4K when it is big enough:
reg [7:0] mem [0:255];
always @(posedge clk) begin
if (we) mem[addr] <= din;
dout <= mem[addr]; // registered read — required for block RAM inference
endAn asynchronous read (assign dout = mem[addr];) is not block RAM; it becomes hundreds of LUTs.
rtl/<name>.v, one module per file, default_nettype none at the top.uart_tx #(.BAUD(115200)) u (.clk(clk), ...).
Positional connections are how ports get swapped.tb/<top>_tb.v — or give it its own tb/<name>_tb.v and run
"$YOSYS_FLOW" <name> to exercise it alone.set_io lines in constraints/<top>.pcf.© autonomous-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in store/agents/yosys/skills/yosys of autonomous-ai/openharness.
Open the folder on GitHubat commit 74c2733
Yosys next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Yosys this skillautonomous-ai/openharness | 1.2k | — | ~4k | Automated safety check: Pass | MIT | |
| Vercel Composition Patternssupabase/supabase | 111k | 58 repos | ~726 | Automated safety check: Pass | MIT | |
| Finishing a Development Branchobra/superpowers | 297k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Typescript Advanced Typesrolling-scopes/rsschool-app | 10k | 25 repos | ~4.2k | Automated safety check: Pass | MPL-2.0 | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Code Review ChecklistshareAI-lab/learn-claude-code | 78k | 5 repos | ~1.1k | Automated safety check: Pass | MIT |
supabase/supabase
React composition patterns that scale. An agent skill from supabase/supabase.
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
rolling-scopes/rsschool-app
Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications.
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
shareAI-lab/learn-claude-code
Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.
onyx-dot-app/onyx
Iteratively improves a PR (GitHub), MR (GitLab), or shelved changelist (Perforce) until Greptile gives it a 5/5 confidence score with zero unresolved comments.
autonomous-ai/openharness
Slices 3D mesh files into printer-profiled plain G-code through real slicer CLIs, with backend discovery, input inspection, dry runs and static validation.
autonomous-ai/openharness
Turns a home-automation request into standard, testable automations.yaml, run against Home Assistant Core's real triggers and verified with its own trace tool.
autonomous-ai/openharness
Turns a musical brief into LilyPond concert-pitch music, checked parts for each instrument and a playable practice pack.
autonomous-ai/openharness
Turns an STL and explicit printer and material requirements into compared OrcaSlicer plans, an editable 3MF project, checked G-code and a portable handoff.
autonomous-ai/openharness
Builds an editable DOCX report, a formula-driven XLSX workbook and a fresh LibreOffice PDF preview from one structured source file, then checks them together.
autonomous-ai/openharness
Dry-run, upload, and cautiously initiate local Bambu Lab print jobs from validated plain .gcode, using Bambu LAN FTPS/MQTT handoffs.
Categories
Write synthesisable Verilog-2005 for an iCE40 FPGA and take it to a bitstream — the language subset that synthesises, the testbench shape the pane draws waves from, the iCEBreaker pinout, how to…. Yosys is an agent skill from autonomous-ai/openharness. Write synthesisable Verilog-2005 for an iCE40 FPGA and take it to a bitstream — the language subset that synthesises, the testbench shape the pane draws waves from, the iCEBreaker pinout, how to read the utilisation and Fmax report, the mistakes that cost you a day (inferred latches, multi-driven nets, blocking assignments in sequential logic, missing reset), and ready-made UART / PWM / debounce blocks.
Yosys fits situations like: debugging RTL in this workspace.
Run `npx skills add autonomous-ai/openharness --skill yosys -a claude-code`. Or copy the skill folder (store/agents/yosys/skills/yosys in autonomous-ai/openharness) into .claude/skills/yosys in your project. Claude Code loads it when a task matches its description.
Run `npx skills add autonomous-ai/openharness --skill yosys -a codex`. Or copy the skill folder (store/agents/yosys/skills/yosys in autonomous-ai/openharness) into .agents/skills/yosys in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add autonomous-ai/openharness --skill yosys -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/yosys, .gemini/skills/yosys, .github/skills/yosys and .opencode/skills/yosys in your project.
SKILL.md names no scripts, command-line tools or credentials: Yosys is instructions for the agent only.
SKILL.md names 1 domain. As links in the text: codeberg.org. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Yosys is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Yosys: Vercel Composition Patterns (supabase/supabase, 111k stars), Finishing a Development Branch (obra/superpowers, 297k stars), Typescript Advanced Types (rolling-scopes/rsschool-app, 10k stars) and PR Babysitter (openinterpreter/openinterpreter, 69k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
autonomous-ai (a GitHub organization) maintains it in autonomous-ai/openharness, which has 1,194 GitHub stars. The repository holds 99 skills in this directory. The repository was last updated on October 9, 2026.
Source: autonomous-ai/openharness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.