agentleFS
ReliOpticReliOptic/campfire/SKILL.md

campfire

Skill0 starsChanged 3 months agoMITView on GitHub

원문 또는 구조화 스냅샷을 audience-of-one Campfire 브리프(motion_brief JSON + 재생 가능한 HTML)로 변환한다. 도메인 무관 코어 — 주제는 pack, 숫자는 snapshot이 공급한다.

3 other projects use a version of this.

Adopted by

Most recently taken up by

  • Other versions3 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 3

    1. murray17/rovai-ai★ 255same name
    2. cukas/claudes-ai-buddies★ 9same name
    3. apideck-libraries/api-skills★ 4same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repositoryOne other file it gives its agents.

The file

Show its rules and text

We split this skill into the rules it gives an agent

14 rules. 0 are common, 12 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 3 edited versions we read keep these.

  • 12

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    If pack and snapshot conflict on a number, snapshot wins.

    line 22
  2. Distinctive:

    If a slot is missing, drop it or mark confidence limited — never invent.

    line 23
  3. Distinctive:

    Never freeze a topic-only layout.

    line 48
  4. Very specific:

    If a host renderer paints say or sub before rows/num/band/gauges, omit say and sub from scene 1.

    line 56
  5. Distinctive:

    Prefer objects from pack.preferred_objects that the snapshot actually fills.

    line 59
  6. Distinctive:

    Do not force portfolio band layout onto ranked news (or vice versa).

    line 60
  7. Distinctive:

    If pack.l2_required is true OR (auto and attention_state=attention): Pass ≥4/6 of the L2 checklist (see scoring.md §L2).

    line 69
  8. Distinctive:

    If quiet/plain or l2_required false: do NOT force spectacle — L2 exempt.

    line 71
  9. Distinctive:

    No meta-count leads; no teaser without later delivery

    line 75
  10. Distinctive:

    Only if pack allows and: not data claim · ≤1s · collapse end · once · low chroma

    line 108
  11. Very specific:

    Every action has consequence.

    line 169
  12. Distinctive:

    Read pack → name through-line for THIS run

    line 177
  13. Distinctive:

    Use the active host transport: Campsite adapter JSON-only, otherwise HTML + JSON + self-check.

    line 182
  14. Distinctive:

    When the runtime explicitly targets the Campsite Hermes adapter, return

    line 186

“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Skill: Campfire composer — universal v3

Freeze: 2026-07-11 · domain-agnostic core

Job

Lower cognitive load. Deliver the point sharp. 한국어: 인지 부담을 덜어 주면서 내용은 선명하게. 끝나면 보는 이가 무엇·왜·그래서 뭐를 한 호흡으로 말한다.

NOT: slide decorator · dashboard reel · log/CoT printer · chrome demo · generic "market news for everyone". ARE: audience-of-one delivery skill — journalism on their rules/positions/actions.

Inputs you will receive

  1. A Domain pack (class, through-line template, slots, CTA templates, L2 flag)
  2. A Run snapshot (today's values only; no live fetch)

If pack and snapshot conflict on a number, snapshot wins. If a slot is missing, drop it or mark confidence limited — never invent.

Authority (higher wins)

  1. Job (load ↓ + sharp ↑)
  2. Journalism gates
  3. This grammar
  4. Wire field names (no silent renames)
  5. Visual polish is downstream

Fidelity ceiling

This skill guarantees L1 (interactive tap-through player) by default, and L2 (one visual form carries the claim) when attention_state=attention or pack.l2_required=true — see "L2 impact" below. JSON output alone, with no player, is L0. It does NOT produce L3 (deterministic bit-identical full-fidelity render/ export, contracted playback stream) or L4 (hosting multiple artifact types in one place) — those need a render engine and host app this skill does not own. Never claim "full cinema" fidelity from this skill's HTML output alone; state the reached level in PART 3 (Fidelity: L0|L1|L2).

Family look

INVARIANT: w→say→sub→evidence→caption; tap=next; journalism; motion allowlist (count/fill/opacity/gap/rise/scaleX); flip/source law; slim decision card; slate hot for priority data; consequence=light (ink-invert), not orange heat. VARIABLE: scene count 3–6; beat; viz within tokens; tone within voice. Never freeze a topic-only layout. keep/freeze two-column is optional surgical only.

Domain adaptation (Surface Law)

  • Market / portfolio / probability / pulse → lead with a supported domain object: numbers, prices, thresholds, gauges, splits, or rows.
  • News / inbox / conversation → lead with ranked items, queues, clusters, sources.
  • Explanation is secondary; evidence expands; item count is never the whole artifact.
  • Surface Law overrides generic field order. w → say → sub → evidence is not permission to put prose before the object that carries the claim.
  • For market / portfolio / probability / pulse, scene 1 MUST include at least one supported domain object filled from the snapshot (num, band, rows, or gauges).
  • If a host renderer paints say or sub before rows/num/band/gauges, omit say and sub from scene 1. A short w grounding kicker is allowed; move the prose lede/interpretation to scene 2 or later.
  • Calm/quiet craft exemption only waives spectacle. It does not waive domain-object lead, the three questions (what changed / why trust / what action or no-action), source honesty, or action honesty.
  • Producer actions must be decision outcomes, not platform navigation or storage. Do not emit labels such as Open in Tent, Tent에 저장, or equivalent host-chrome actions as the recommended decision action.
  • Prefer objects from pack.preferred_objects that the snapshot actually fills.
  • Do not force portfolio band layout onto ranked news (or vice versa).

Success

A) Load ↓: one through-line; one fact/comparison per scene; no "where to look?"; no monologue; ≤1 recommended CTA (+ optional secondary) B) Sharp ↑: conclusion · one evidence object · next action; cover test L1 floor: mineral calm; no empty voids; zones respected

L2 impact

If pack.l2_required is true OR (auto and attention_state=attention): Pass ≥4/6 of the L2 checklist (see scoring.md §L2); ONE form IS the claim. If quiet/plain or l2_required false: do NOT force spectacle — L2 exempt.

Journalism

  • One decision/question for the whole brief (from pack.through_line_template + snapshot)
  • No meta-count leads; no teaser without later delivery
  • Organic arc; info gain; summary no new facts
  • Comparisons need visuals
  • No invented numbers
  • confidence_level honest

Type stack (no schema rename)

w=kicker (no §paths) · say=headline ≤2 lines · sub=standfirst (context OR so-what) Evidence objects · optional chips. JSON: \n for line break; no raw <br> in envelope.

Zones

orientation → statement → evidence → consequence (top flow, no fill-hole)

Arc + beat

stake/lede → hero change → evidence/scan → optional risk → land/summary Each scene: "beat": "lede"|"evidence"|"scan"|"land" when possible.

Pacing

BASE: d=1.5+chars/21; summary×0.82; clamp 2.6–8.5 EDIT: beat may bias hold; avoid all scenes stuck at ceiling Seg ∝ dur; total ~8–20s when possible; entrance order = hierarchy

Player (HTML)

392px; TAP NEXT; body tap=next; hold≥400ms pause; seg seek; Enter/→ next; Space pause; reduced-motion OK Hot=#33404E; financial duotone only on market rows CTA ink-invert; slim card (recommended tag, not dark-fill monopoly)

Motion allowlist

ALLOWED: count fill opacity gap rise scaleX BANNED decoration: bounce glitch 3D cinematic MP4-body rainbow

N2 parody

Only if pack allows and: not data claim · ≤1s · collapse end · once · low chroma

Flip / source

Front=edited brief; back/panel=immutable source (snapshot or original_source) Chrome control only — never body-tap. Source panel OK as flip substitute.

Decision slim

Equal visual weight; recommended=small tag; consequence≥8; dismiss=defer

Voice + copy gate

해요체 + dry wit ~70%; ≤1 metaphor/scene; roast systems not people; CTA=outcome fork. Copy gate 6 checks (headline scene, standfirst why-now, no §paths, action sentences, CTA branch, no abuse).

Wire: motion_brief JSON

Emit a BriefEnvelope-compatible object:

{
  "id": string,
  "camp_id": string,                    // target inbox; "" if unknown
  "origin": "cronlet" | "trail" | "session",
  "brief_type": "verdict" | "metric" | "ranked" | "report" | "quiet" | "plain",
  "attention_state": "attention" | "calm" | "quiet" | "failed",
  "artifact_format": "motion_brief",    // "quiet_row" | "plain_text" for ops-quiet
  "confidence_level": "sufficient" | "limited" | "error",
  "title": string,
  "scheduled_at": ISO-8601 with offset,
  "scenes": [
    { "w"?, "say"?, "sub"?, "num"?, "band"?, "items"?, "gauges"?, "rows"?,
      "steps"?, "caution"?, "chips"?, "summary"?,
      "beat"?: "lede"|"evidence"|"scan"|"land" }
  ],
  "sources": [ { "title", "source_type": "gmail"|"web"|"calendar"|"repo"|"manual",
                 "fresh"?, "trust"?, "quote"?, "why"? } ],
  "actions": [
    { "label": string,
      "consequence": string,            // ≥8 chars — 일어날 일을 문장으로
      "recommended"?: boolean,
      "primary"?: boolean }             // recommended와 함께 primary:true도 설정 (shipping-schema 필드)
  ],
  "fallback_text": string,              // REQUIRED — 위젯 때문에 메시지가 유실되는 일은 없다
  "original_source"?: { "format": "text", "content": string }
}

Scene object shapes:

num    { v: number|string, dec?: 0-2, suf?: string, hot?: bool }
band   { max: 0-1, at: 0-1, lo: string, hi: string }      // your-line threshold bar
items  [ { n?: rank, t: title, d?: detail, delta?: string, dir?: "up"|"dn" } ]  max 5
rows   [ { k, v, s?: sub, dir?: "up"|"dn", badge?: "ok"|"wait", bar?: {v: 0-1} } ]  max 6
gauges [ { q: question, yes: 0-100, hot?: bool } ]  max 4
steps  [ string ]  max 5 · caution: string · chips: [string]  max 4

Rules:

  • Scene must carry ≥1 of say/num/items/gauges/rows/steps. Scenes max 8.
  • ≥2 scenes; last scene summary: true
  • Every action has consequence; ONE recommended max — mirror it as primary: true
  • beat / recommended / original_source are extensions: strict validators may strip them, so a player that wants beat must read the raw JSON, not the validated copy
  • original_source.content if present = snapshot prose, not a new rewrite
  • origin / brief_type / attention_state from pack + snapshot rules

Process

  1. Read pack → name through-line for THIS run
  2. Map snapshot → slots; drop empty; pick objects per Surface Law
  3. Choose attention_state (pack default + breach rules if pack defines)
  4. Arc + beats; L2 only if required
  5. Slim CTAs from templates filled by snapshot
  6. Use the active host transport: Campsite adapter JSON-only, otherwise HTML + JSON + self-check.

Output

Campsite adapter transport override

When the runtime explicitly targets the Campsite Hermes adapter, return exactly one JSON object and nothing else:

{"archetype":"motion_brief","archetype_version":"0.1","fallback_text":"...","payload":{}}

payload is the motion brief. Do not emit HTML, Markdown fences, PART headings, or commentary on this transport. Runtime-provided structured snapshot values are authoritative; never browse for replacements or invent missing rows. This host transport overrides the default three-part authoring output below, but it does not relax Campfire grammar or source honesty.

Default authoring output

PART 1: HTML (complete single file, inline CSS+JS; same scene data as JSON; TAP NEXT, hold pause, seg seek, reading-time durations, keyboard + reduced-motion) PART 2: JSON (BriefEnvelope + optional extensions; no commentary inside) PART 3: six lines — Decision: ... One-liner (what/why/so-what): ... Domain class + hero object: ... Load removed: ... Fidelity: L1 (+ L2 pass|exempt|fail if attention) — ... Cover-test + copy-gate: ...

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.