Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,5 +78,9 @@
}
}
},
"enabledPlugins": {}
}
"enabledPlugins": {},
"env": {
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
},
"teammateMode": "in-process"
}
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ Desktop.ini

.notes

# Claude Code — workspace state, worktrees
.claude/worktrees/

# Private internal docs (audits, drafts, pre-launch notes)
docs/internal/

Expand Down
99 changes: 54 additions & 45 deletions .lenserfight/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Use:
```bash
lf validate
lf validate --no-global
lf validate .lenserfight/colenses/pr-review/COLENS.MD
lf validate .lenserfight/colenses/pr-review/SKILL.md
```

Override behavior, highest priority first:
Expand Down Expand Up @@ -59,37 +59,39 @@ Full docs: [`docs/lenserfight-file-system.md`](../docs/lenserfight-file-system.m
```
.lenserfight/
├── README.md ← this file
├── lenses/ ← LENS.MD (and SKILL.MD alias) per lens template
├── lenses/ ← SKILL.md per lens template
│ └── <slug>/
│ ├── LENS.MD ← canonical, ConectLens-native form
│ ├── SKILL.MD ← optional industry-compatibility alias
│ ├── SKILL.md ← agentskills.io-standard filename
│ ├── references/ ← supporting prompt fragments, examples
│ ├── assets/ ← non-secret static assets
│ ├── templates/ ← parameter placeholder examples
│ └── scripts/ ← optional generator/test scripts
├── lensers/ ← LENSER.MD per lenser template
│ └── <slug>/LENSER.MD
├── colenses/ ← COLENS.MD per colens template
│ └── <slug>/COLENS.MD
├── battles/ ← BATTLE.MD per battle template
│ └── <slug>/BATTLE.MD
└── rays/ ← RAY.MD per canonical production ray
└── <slug>/RAY.MD
├── lensers/ ← SKILL.md per lenser template
│ └── <slug>/SKILL.md
├── colenses/ ← SKILL.md per colens template
│ └── <slug>/SKILL.md
├── battles/ ← SKILL.md per battle template
│ └── <slug>/SKILL.md
├── rays/ ← SKILL.md per canonical production ray
│ └── <slug>/SKILL.md
└── skills/ ← SKILL.md per agent skill (Claude Code, lf CLI)
└── <slug>/SKILL.md
```

## Core terminology

LenserFight is part of the **ConectLens** ecosystem. The platform uses native terminology in `.MD` filenames so the on-disk vocabulary matches the runtime database:
LenserFight follows the **agentskills.io** sector standard. Every item is a Skill — the `SKILL.md` filename is universal; the directory name determines the kind:

| File | Concept | DB table |
| ------------ | ------------------------------------------------------------ | --------------------- |
| `LENS.MD` | A reusable prompt asset — a single AI instruction unit | `lenses.lenses` |
| `LENSER.MD` | A person or AI profile that owns lenses and execution policy | `lensers.profiles`, `agents.ai_lensers` |
| `COLENS.MD` | A DAG of lens nodes feeding outputs into each other | `lenses.workflows` |
| `BATTLE.MD` | A scored competition between contenders | `battles.battles` |
| `RAY.MD` | A discovery ray (`/ray/:slug` route) | `content.tags` |
| Directory | Kind | Concept | DB table |
| ------------ | ------- | ------------------------------------------------------------ | --------------------- |
| `lenses/` | Lens | A reusable prompt asset — a single AI instruction unit | `lenses.lenses` |
| `lensers/` | Lenser | An AI profile that owns lenses and execution policy | `lensers.profiles`, `agents.ai_lensers` |
| `colenses/` | CoLens | A DAG of lens nodes feeding outputs into each other | `lenses.workflows` |
| `battles/` | Battle | A scored competition between contenders | `battles.battles` |
| `rays/` | Ray | A discovery ray (`/ray/:slug` route) | `content.tags` |
| `skills/` | Skill | An agent skill (CLI, IDE, agentic use) | — |

`SKILL.MD` is supported as an industry-compatibility alias for `LENS.MD` — many OSS AI ecosystems use `SKILL.MD` for the same concept. Legacy `agents/AGENT.MD` and `workflows/WORKFLOW.MD` are read for compatibility only; canonical files are `lensers/LENSER.MD` and `colenses/COLENS.MD`.
Legacy `agents/AGENT.MD` and `workflows/WORKFLOW.MD` are read for compatibility only.

## What MUST NOT live here

Expand Down Expand Up @@ -119,47 +121,54 @@ The seed file is the source of truth for the database row; the `.MD` file is the
## Authoring a new template

1. Pick a slug — lowercase, hyphenated, ≤ 40 chars (matches `content.tags.slug` rules).
2. Create `.lenserfight/lenses/<slug>/LENS.MD` with the frontmatter schema below.
2. Create `.lenserfight/lenses/<slug>/SKILL.md` with the frontmatter schema below.
3. Add the corresponding SQL block to the matching seed file under `supabase/seeds/4*_*templates.sql`.
4. Add rays via `.lenserfight/rays/<slug>/RAY.MD` if you introduce a new one.
4. Add rays via `.lenserfight/rays/<slug>/SKILL.md` if you introduce a new one.
5. Run `pnpm supabase:combine-seeds && pnpm supabase:reset` locally and confirm the lens page loads.

### `LENS.MD` frontmatter schema
### `SKILL.md` frontmatter schema (agentskills.io standard)

```yaml
---
name: <slug>
title: <Human-readable title>
description: <One-sentence what-and-why. Used by /ray search.>
author: '@lenserfight' | '@chainabit' | '@conectlens'
visibility: public | unlisted | private
forkable: true | false
disclaimer: <required for legal/finance templates>
inputs:
- label: <param_label>
tool: text | textarea
required: true | false
example: <one-line example value>
outputs:
kind: text | image | video | audio | table | checklist | script | structured
tags:
- <slug>
seed_uuid: <deterministic UUID matching the SQL seed>
description: <One-sentence what-and-when. Starts with "Use when…" for agent activation.>
---
```

The body of `LENS.MD` is the actual prompt template using `[[param_label]]` for parameter substitution.
Two fields only. The body is the prompt template; use `[[param_label]]` tokens for parameter substitution.

**LenserFight extensions** go in the body as markdown sections, not in frontmatter:
- Parameters: list `[[label]]` tokens under a `## Parameters` heading with descriptions.
- Legal disclaimers: add a `> **Disclaimer:** This output is not legal/financial advice.` blockquote.

### Example

```markdown
---
name: code-reviewer
description: Review a diff for correctness, security, tests, maintainability, and release risk. Use when reviewing PRs or patches.
---

# Code Reviewer

Review `[[diff]]` using `[[context]]` when provided.

## Parameters

- `[[diff]]` — the unified diff to review (required)
- `[[context]]` — additional context such as ticket description or prior review comments (optional)
```

## Conventions to remember

- Slugs are stable. Renaming a slug breaks every `/ray/<slug>` link and every published share URL.
- UUIDs in seeds are stable. Never change a seed UUID once it has shipped.
- The `disclaimer:` field is mandatory for any template that touches legal or financial advice. Tests fail if it is missing on a tagged-`legal` or tagged-`finance` lens.
- `forkable: true` requires that the template can produce a clean clone via `fn_create_lens` / `fn_clone_workflow` / `fn_battles_create_rematch`.
- The first non-frontmatter heading of every `.MD` file should be `# <Title>` matching the frontmatter `title:`.
- Legal/finance templates must include a disclaimer in the body (not frontmatter). Tests fail if it is missing.
- The kind is inferred from the directory (`lenses/` → Lens, `battles/` → Battle, etc.), not from frontmatter.
- The first non-frontmatter heading of every `SKILL.md` should be `# <Human Title>`.

## Related docs

- [`docs/en/reference/storage-architecture.md`](../docs/en/reference/storage-architecture.md) — project vs. runtime separation rules
- [`docs/en/how-to/contributors/template-authoring.md`](../docs/en/how-to/contributors/template-authoring.md) — how to write a `LENS.MD`
- [`docs/en/how-to/contributors/template-authoring.md`](../docs/en/how-to/contributors/template-authoring.md) — how to write a `SKILL.md`
- [`docs/en/reference/community-api/ai-lensers.md`](../docs/en/reference/community-api/ai-lensers.md) — agent API
Original file line number Diff line number Diff line change
@@ -1,21 +1,6 @@
---
name: blog-vs-youtube-content
title: Blog vs YouTube — Same Topic, Different Medium
description: Creator-side battle comparing the blog outline and YouTube script for the same topic.
author: '@lenserfight'
visibility: public
forkable: true
battle_type: workflow
contenders:
- kind: colens
workflow: blog-writer
label: Blog Writer
- kind: lens
lens: youtube-script-generator
label: YouTube Script Generator
voter_eligibility: open
rays: [content, creator, blog, youtube, template]
seed_uuid: 51000000-0002-0005-0000-000000000001
---

# Blog vs YouTube — Same Topic, Different Medium
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,6 @@
---
name: claude-vs-openai-pr-review
title: Claude vs OpenAI — Pull Request Review
description: Battle template comparing Claude and OpenAI on the same code review task using a four-axis rubric.
author: '@lenserfight'
visibility: public
forkable: true
battle_type: lens
lens: code-reviewer
rubric: code-quality-rubric
contenders:
- kind: ai_model
model: claude-sonnet-4-6
label: Claude Sonnet 4.6
- kind: ai_model
model: gpt-4o
label: GPT-4o
voter_eligibility: open
rays: [github, claude, openai, developer, template]
seed_uuid: 51000000-0002-0004-0000-000000000001
---

# Claude vs OpenAI — Pull Request Review
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,6 @@
---
name: finance-report-workflow-comparison
title: Finance Report Workflow Comparison
description: Compares single-lens and workflow-based finance report explanations. This is not financial advice.
author: '@lenserfight'
visibility: public
forkable: true
battle_type: workflow
participants:
- type: workflow
ref: finance-report-review
- type: lens
ref: finance-report-explainer
rubric: finance-explanation-rubric
rays: [finance, business, ai-comparison]
---

# Finance Report Workflow Comparison
Expand Down
30 changes: 0 additions & 30 deletions .lenserfight/battles/gemini-vs-openai-youtube-planning/BATTLE.MD

This file was deleted.

12 changes: 12 additions & 0 deletions .lenserfight/battles/gemini-vs-openai-youtube-planning/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
name: gemini-vs-openai-youtube-planning
description: Compares two models on creator planning using the YouTube content workflow.
---

# Gemini vs OpenAI — YouTube Planning

This battle compares how two models turn the same video brief into script, storyboard, thumbnail, and repurposing outputs.

## Evaluation

Score usefulness, audience fit, production specificity, factual discipline, and channel readiness.
Original file line number Diff line number Diff line change
@@ -1,26 +1,6 @@
---
name: legal-review-comparison
title: Legal Review — Claude vs Gemini on the Same Contract
description: Battle template comparing AI legal-review outputs on identical contract text. Analysis only — NOT legal advice.
author: '@lenserfight'
visibility: public
forkable: true
battle_type: lens
lens: legal-contract-reviewer
disclaimer: |
Outputs in this battle are analysis aids and NOT legal advice. The battle
outcome does not validate any model as fit for legal practice. Always have a
qualified, licensed lawyer review the actual document before acting.
contenders:
- kind: ai_model
model: claude-sonnet-4-6
label: Claude Sonnet 4.6
- kind: ai_model
model: gemini-2.5-flash
label: Gemini 2.5 Flash
voter_eligibility: open
rays: [legal, claude, gemini, analysis, template]
seed_uuid: 51000000-0002-0006-0000-000000000001
---

# Legal Review — Claude vs Gemini
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,6 @@
---
name: legal-workflow-comparison
title: Legal Workflow Comparison
description: Compares legal-adjacent document review outputs. This is not legal advice and must be reviewed by a qualified lawyer.
author: '@lenserfight'
visibility: public
forkable: true
battle_type: workflow
participants:
- type: workflow
ref: legal-document-review
- type: lens
ref: legal-contract-reviewer
rubric: legal-triage-rubric
rays: [legal, ai-comparison]
---

# Legal Workflow Comparison
Expand Down
32 changes: 0 additions & 32 deletions .lenserfight/battles/reasoning-quality-shootout/BATTLE.MD

This file was deleted.

12 changes: 12 additions & 0 deletions .lenserfight/battles/reasoning-quality-shootout/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
name: reasoning-quality-shootout
description: Compares model answers with an explicit reasoning-quality scorecard.
---

# Reasoning Quality Shootout

Use this battle when a team wants to compare reasoning quality rather than style.

## Evaluation

Judge evidence use, assumptions, edge cases, calibration, and decision usefulness.
Original file line number Diff line number Diff line change
@@ -1,18 +1,6 @@
---
name: workflow-vs-lens-pr-review
title: Workflow vs Lens — PR Review
description: Compares a single code-review lens against a multi-step PR review workflow.
author: '@lenserfight'
visibility: public
forkable: true
battle_type: workflow
participants:
- type: lens
ref: code-reviewer
- type: workflow
ref: pr-review
rubric: pr-review-depth-rubric
rays: [developer, github, ai-comparison]
---

# Workflow vs Lens — PR Review
Expand Down
Loading
Loading