Borrowing it
Nothing to install: this file belongs to Mehtrick/bjoern. 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/Mehtrick/bjoern/master/.agents/bjoern-zgr/SKILL.mdgit clone --depth 1 https://github.com/Mehtrick/bjoernWrote 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/skills/mehtrick/bjoern/bjoern-zgr)<a href="https://agentmods.dev/skills/mehtrick/bjoern/bjoern-zgr"><img src="https://agentmods.dev/badge/skills/mehtrick/bjoern/bjoern-zgr/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/skills/mehtrick/bjoern/bjoern-zgr"><img src="https://agentmods.dev/badge/skills/mehtrick/bjoern/bjoern-zgr.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.00050 | $0.06664 |
| Opus 5 | $0.00025 | $0.03332 |
| Sonnet 5 | $0.00010 | $0.01333 |
| Haiku 4.5 | $0.00005 | $0.00666 |
Grade A, and why
bjoern-zgr 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 10d ago.
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 — 948 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Writing Bjoern .zgr Files
How Bjoern Works
.zgrfiles (YAML-based BDD specs) are read by the parser- The generator creates abstract Java test classes + interfaces via JavaPoet
- A Freemarker template produces AsciiDoc documentation
- Gradle tasks:
bjoerngen(code) andbjoerndoc(docs)
Generated code lives in src/gen/ and is regenerated on every run — never edit it.
When to Use Bjoern
Bjoern is ideal for acceptance-oriented tests where business logic is paramount and the specification serves as living documentation.
Test Type Suitability
| Test Type | Suitability | Recommendation |
|---|---|---|
| Use Cases / User Journeys | ★★★★★ | Ideal - Primary use case |
| Acceptance Tests | ★★★★★ | Ideal - Stakeholders understand specs |
| Business Logic / Domain Rules | ★★★★★ | Ideal for complex domain rules |
| API Tests | ★★★★☆ | Very good with technical abstraction |
| Integration Tests | ★★★★☆ | Very good for multi-component workflows |
| UI Tests | ★★★☆☆ | Good with Page Object Pattern |
| Security Tests | ★★★☆☆ | Only for business security requirements |
| Unit Tests | ★★☆☆☆ | Only for complex business logic |
| Performance Tests | ★☆☆☆☆ | Not suitable |
Use Cases (Primary Use Case)
Bjoern excels at testing use cases - complete user journeys that deliver business value.
What makes a good use case for Bjoern:
- Has clear business value
- Involves multiple steps/interactions
- Has observable outcomes
- Can be described in business language
- Stakeholders care about the behavior
Example: E-Commerce Checkout Use Case
Feature: Customer checkout process
Scenario: Customer completes purchase with credit card
Given:
- Customer "alice" has items in cart
- Cart total is "150" Euro
- Customer has payment method "Credit Card"
When:
- Customer proceeds to checkout
- Customer enters shipping address "Main St 123, Berlin"
- Customer confirms payment with "Credit Card"
Then:
- Order is created with number "ORD-2024-001"
- Payment of "150" Euro is processed
- Confirmation email is sent to "[email protected]"
- Cart is empty
Scenario: Checkout fails due to payment declined
Given:
- Customer "bob" has items in cart
- Cart total is "200" Euro
- Payment method "Credit Card" is declined
When:
- Customer proceeds to checkout
- Customer confirms payment with "Credit Card"
Then:
- Order is not created
- Error message is "Payment declined"
- Cart still contains items
- No email is sent
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.
- 10d ago First seen · 948 lines · 50 tokens per session scan A 4cd18ed22509
bjoern-zgr is a skill published in the GitHub repository Mehtrick/bjoern (4 stars, last pushed 19d ago), licensed MIT. It adds 50 tokens to every session and 6,664 once invoked, about $0.0003 per session on Opus 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-08-31.
Other skills, from other repositories
ordering-and-flakes
Control spec ordering and manage flaky specs — Serial, Ordered containers with BeforeAll/AfterAll/ContinueOnFailure, OncePerOrdered, SpecPriority, plus FlakeAttempts/--flake-attempts, MustPassRepeatedly, --repeat, and --until-it-fails. Use when specs must run in a fixed order, you need once-per-group setup, you're…
parallelism
Run Ginkgo suites in parallel — ginkgo -p / --procs, the separate-process (not goroutine) model, SynchronizedBeforeSuite/SynchronizedAfterSuite vs BeforeSuite, GinkgoParallelProcess() for sharding ports/tmpdirs/databases, building a binary once via gexec, piping child-process output to GinkgoWriter, and what N…
running
Run Ginkgo suites with the ginkgo CLI — run, -r, -p, --dry-run, watch, build (precompiled .test binaries), generate, outline, unfocus, labels, version; spec randomization (--randomize-all/--randomize-suites/--seed); running multiple suites (--keep-going/--skip-package/--compilers); previewing (--dry-run…
tables-and-dynamic-specs
Parameterize and generate Ginkgo specs — DescribeTable/Entry table-driven specs, Entry descriptions (string, nil, closure, EntryDescription), PEntry/FEntry and per-Entry decorators, DescribeTableSubtree, generating specs in a construction-time loop, loading fixtures in TestXxx before RunSpecs, and shared-behavior…
timeouts-and-async
Make Ginkgo specs interruptible and test asynchronous behavior — SpecContext/context.Context cancellable nodes, NodeTimeout/SpecTimeout/GracePeriod, the --timeout flag, Abort and SIGINT behavior, Gomega Eventually/Consistently (the func(g Gomega) form, .WithContext), and the defer GinkgoRecover() rule for goroutines.…
writing-specs
Author good Ginkgo specs — container nodes (Describe/Context/When), subject nodes (It/Specify), setup/cleanup nodes (BeforeEach, JustBeforeEach, AfterEach, DeferCleanup, BeforeSuite/AfterSuite), the "declare in container, initialize in BeforeEach" rule, separating creation from configuration, reusable test helpers…