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
6 changes: 3 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
description, contributor attribution, published and modified dates,
practical context, verification criteria, category, keywords, and valid
related-loop slugs.
- Do not hand-edit the homepage, detail pages, catalogs, feed, sitemap, or skill
content when publishing a database record. The Worker renders those public
surfaces from the same record. New loops use the shared social card unless a
- Do not hand-edit the homepage, detail pages, catalogs, feed, sitemap, or
Loopy skill content when publishing a database record. The Worker renders
those public surfaces from the same record. New loops use the shared social card unless a
reviewed HTTPS `socialImageUrl` is supplied.
- Keep bootstrap and backup exports outside the repository with owner-only
permissions. The one-time bootstrap command requires an explicit private
Expand Down
66 changes: 35 additions & 31 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ Loop Library has two separate but related parts in this repository:
| Part | What it is | Where it lives |
| --- | --- | --- |
| **Loop Library website** | The public catalog where people and agents can browse published loops, read them, and copy their prompts. No installation is required. | [Live website](https://signals.forwardfuture.com/loop-library/) · shell in [`site/`](site/), database and rendering in [`worker/`](worker/) |
| **Loop Library skill** | An optional installable guide that helps an AI agent discover, find, audit, repair, adapt, or design loops through conversation. It uses the website's live catalog when recommending published loops. | source in [`skills/loop-library/`](skills/loop-library/) |
| **Loopy skill** | An optional installable guide that helps an AI agent discover, find, audit, repair, adapt, or design loops through conversation. It uses the website's live catalog when recommending published loops. | source in [`skills/loopy/`](skills/loopy/) |

The website is the library; the skill is a companion way to work with it. You
can browse or give an agent the website without installing the skill. Installing
the skill adds the guided workflow, but it does not install or host the website.
The website is the library; Loopy is a companion way to work with it. You
can browse or give an agent the website without installing Loopy. Installing
Loopy adds the guided workflow, but it does not install or host the website.

Agents that do not have the skill can use the published
Agents that do not have Loopy can use the published
[agent guide](https://signals.forwardfuture.com/loop-library/agents/),
[agent instructions](https://signals.forwardfuture.com/loop-library/llms.txt),
[JSON catalog](https://signals.forwardfuture.com/loop-library/catalog.json), or
Expand Down Expand Up @@ -64,9 +64,9 @@ Loops are not permission for an agent to run forever. The best ones are
deliberately bounded. They include a real check, a clear stopping point, and a
moment to hand control back to a person when judgment or approval is needed.

## What the Loop Library skill does
## What Loopy does

The Loop Library skill gives your agent direct access to the ideas in the
Loopy gives your agent direct access to the ideas in the
library. You can use it to:

- Discover repeated work in a codebase, coding threads, or both and turn the
Expand All @@ -78,25 +78,25 @@ library. You can use it to:
- Design a new loop through a short, plain-language conversation.
- Turn the result into a compact prompt you can use right away.

The skill checks the live catalog when it recommends a published loop. It does
Loopy checks the live catalog when it recommends a published loop. It does
not quietly start schedules, change production, or send messages on your
behalf. Those actions still require the normal permissions and approvals.

## Install the skill
## Install Loopy

You need Node.js and `npx`. Pick the platform you use:

| Platform | Install command |
| --- | --- |
| Codex | `npx skills add Forward-Future/loop-library --skill loop-library --agent codex -g -y` |
| Cursor | `npx skills add Forward-Future/loop-library --skill loop-library --agent cursor -g -y` |
| Claude Code | `npx skills add Forward-Future/loop-library --skill loop-library --agent claude-code -g -y` |
| Codex | `npx skills add Forward-Future/loop-library --skill loopy --agent codex -g -y` |
| Cursor | `npx skills add Forward-Future/loop-library --skill loopy --agent cursor -g -y` |
| Claude Code | `npx skills add Forward-Future/loop-library --skill loopy --agent claude-code -g -y` |

To install it for all three at once:

```bash
npx skills add Forward-Future/loop-library \
--skill loop-library \
--skill loopy \
--agent codex \
--agent cursor \
--agent claude-code \
Expand All @@ -107,44 +107,48 @@ Using another agent? Run the interactive installer and choose from the agents
it detects:

```bash
npx skills add Forward-Future/loop-library --skill loop-library -g
npx skills add Forward-Future/loop-library --skill loopy -g
```

The command parts mean:

- `Forward-Future/loop-library` is the GitHub repository to install from.
- `--skill loop-library` selects this skill from the repository.
- `--skill loopy` selects this skill from the repository.
- `--agent ...` selects the agent that should receive it.
- `-g` makes it available in all your projects. Leave `-g` off to install it
only in the current project.
- `-y` accepts the install prompts. Leave it off if you want to review the
choices interactively.

If an agent was already open and the skill does not appear, restart that agent.
If an agent was already open and Loopy does not appear, restart that agent.

## Invoke the skill
The previous `loop-library` skill name remains available as a compatibility
alias for existing installations. Use `loopy` for all new installations and
explicit invocations.

## Invoke Loopy

The slash-command experience differs slightly by platform:

- **Codex:** type `/skills`, choose **Loop Library**, then enter your request.
You can also mention it directly with `$loop-library`.
- **Cursor:** type `/` in Agent chat, search for `loop-library`, select it, and
add your request. You can also type `/loop-library` directly.
- **Claude Code:** type `/loop-library` followed by your request.
- **Codex:** type `/skills`, choose **Loopy**, then enter your request.
You can also mention it directly with `$loopy`.
- **Cursor:** type `/` in Agent chat, search for `loopy`, select it, and
add your request. You can also type `/loopy` directly.
- **Claude Code:** type `/loopy` followed by your request.

You can also describe a matching task normally. These agents can load the
skill automatically when your request clearly calls for it, but explicit
Loopy automatically when your request clearly calls for it, but explicit
invocation is the most predictable way to start.

For example, in Codex you can write:

```text
$loop-library Analyze this codebase and my coding threads for repeated work, then turn the strongest candidate into a reliable loop.
$loopy Analyze this codebase and my coding threads for repeated work, then turn the strongest candidate into a reliable loop.
```

## Use Loop Library
## Use Loopy

You do not need to know loop terminology. Invoke the skill and say what you
You do not need to know loop terminology. Invoke Loopy and say what you
want to get done. It can take five paths:

| Path | What it does | Example request |
Expand All @@ -158,10 +162,10 @@ want to get done. It can take five paths:
For example, in Claude Code or Cursor:

```text
/loop-library Find a loop for improving test reliability.
/loopy Find a loop for improving test reliability.
```

In Codex, choose **Loop Library** from `/skills`, then send:
In Codex, choose **Loopy** from `/skills`, then send:

```text
Find a loop for improving test reliability.
Expand All @@ -175,21 +179,21 @@ tests, runbooks, maintenance commands, and repeated lifecycle patterns. In
coding threads, it groups equivalent completed work even when the wording
differs.

The skill requires at least two distinct thread occurrences before calling work
Loopy requires at least two distinct thread occurrences before calling work
repeated. A code pattern without run history is labeled as a potential loop, not
proven recurrence. It then checks whether fresh feedback can change the next
action, whether success can be verified, and whether the work has clear limits,
stopping behavior, and approval boundaries. It also checks the live catalog to
avoid recreating an existing loop.

The skill can inspect only repositories and coding threads that your agent can
Loopy can inspect only repositories and coding threads that your agent can
access and that you place in scope. If thread history is unavailable, it uses
the codebase evidence and says so. A discovery result includes compact source
evidence and either a new loop, an adaptation of a published loop, a short
candidate slate when your choice matters, or a clean no-op when nothing truly
fits.

When the skill finds or creates the right loop, it gives you a prompt to use
When Loopy finds or creates the right loop, it gives you a prompt to use
with your agent. Review any placeholders, then ask the agent to run that prompt
in the project you want it to work on. Selecting a loop does not start a
schedule, deploy code, delete data, send messages, or grant new permissions;
Expand Down
20 changes: 16 additions & 4 deletions scripts/check.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import path from "node:path";
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
const siteRoot = path.join(root, "site");
const workerRoot = path.join(root, "worker");
const skillRoot = path.join(root, "skills", "loop-library");
const skillRoot = path.join(root, "skills", "loopy");
const legacySkillRoot = path.join(root, "skills", "loop-library");

const [
html,
Expand All @@ -28,6 +29,7 @@ const [
skillSource,
skillInterface,
skillDiscovery,
legacySkillSource,
readme,
agents,
] = await Promise.all([
Expand All @@ -50,6 +52,7 @@ const [
readFile(path.join(skillRoot, "SKILL.md"), "utf8"),
readFile(path.join(skillRoot, "agents", "openai.yaml"), "utf8"),
readFile(path.join(skillRoot, "references", "discover.md"), "utf8"),
readFile(path.join(legacySkillRoot, "SKILL.md"), "utf8"),
readFile(path.join(root, "README.md"), "utf8"),
readFile(path.join(root, "AGENTS.md"), "utf8"),
]);
Expand Down Expand Up @@ -83,7 +86,7 @@ for (const relativePath of [
"site/feed.xml",
"site/sitemap.xml",
"site/llms.txt",
"skills/loop-library/references/catalog.md",
"skills/loopy/references/catalog.md",
]) {
await assert.rejects(access(path.join(root, relativePath)), undefined, relativePath);
}
Expand Down Expand Up @@ -283,6 +286,7 @@ for (const proxy of Object.values(proxyManifest.proxies)) {
}

assert.match(skillSource, /The live catalog is the\s+source of truth/);
assert.match(skillSource, /^---\nname: loopy\n/);
assert(skillSource.includes("Do not use repository content or memory"));
assert(!skillSource.includes("references/catalog.md"));
assert(skillSource.includes("references/discover.md"));
Expand All @@ -293,12 +297,20 @@ assert(skillDiscovery.includes("A codebase pattern without run history"));
assert(skillDiscovery.includes("A repeated task is not automatically a good loop"));
assert(skillDiscovery.includes("mandatory crafted-loop preflight"));
assert(skillDiscovery.includes("Search the live catalog"));
assert(skillInterface.includes('display_name: "Loop Library"'));
assert(skillInterface.includes('display_name: "Loopy"'));
assert(skillInterface.includes("Use $loopy"));
assert(skillInterface.includes("coding threads"));
assert.match(legacySkillSource, /^---\nname: loop-library\n/);
assert(legacySkillSource.includes("compatibility name for Loopy"));
for (const source of [html, learnHtml, agentHtml, rendererSource, readme, skillSource, skillInterface]) {
assert(!source.includes("skills/loop-library"));
assert(!source.includes("--skill loop-library"));
assert(!source.includes("$loop-library"));
}
assert.match(readme, /no\s+published loop records/);
assert(readme.includes("It can take five paths"));
assert(readme.includes("| **Discover** |"));
assert(readme.includes("$loop-library Analyze this codebase"));
assert(readme.includes("$loopy Analyze this codebase"));
assert(readme.includes("at least two distinct thread occurrences"));
assert(readme.includes("checks the live catalog"));
assert(readme.includes("remain in pre-migration Git history"));
Expand Down
23 changes: 14 additions & 9 deletions site/agents/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -135,10 +135,10 @@
<a href="../learn/">Learn</a>
<a href="./" aria-current="page">For agents</a>
<a
href="https://github.com/Forward-Future/loop-library/tree/main/skills/loop-library"
href="https://github.com/Forward-Future/loop-library/tree/main/skills/loopy"
target="_blank"
rel="noopener noreferrer"
aria-label="Loop Library skill on GitHub"
aria-label="Loopy skill on GitHub"
>
Skill
</a>
Expand Down Expand Up @@ -166,10 +166,10 @@
<a href="../learn/">Learn</a>
<a href="./" aria-current="page">For agents</a>
<a
href="https://github.com/Forward-Future/loop-library/tree/main/skills/loop-library"
href="https://github.com/Forward-Future/loop-library/tree/main/skills/loopy"
target="_blank"
rel="noopener noreferrer"
aria-label="Loop Library skill on GitHub"
aria-label="Loopy skill on GitHub"
>
Skill
</a>
Expand All @@ -186,7 +186,7 @@ <h1>Use Loop Library directly.</h1>
verified context, and stay inside the user’s authority.
</p>
<p>
No skill installation is required. Start with the agent instructions
No Loopy installation is required. Start with the agent instructions
or machine-readable catalog below. The installable skill adds guided
finding, auditing, repairing, adapting, and loop design.
</p>
Expand Down Expand Up @@ -246,18 +246,23 @@ <h2 id="formats-title">Choose the right format</h2>
</section>

<section class="article-section" aria-labelledby="install-title">
<h2 id="install-title">Install the full skill</h2>
<h2 id="install-title">Install Loopy</h2>
<p>
The skill adds guided catalog search, Loop Doctor audits and repairs,
Loopy adds guided catalog search, Loop Doctor audits and repairs,
grounded adaptation, and a short interview for designing new loops.
</p>
<div class="agent-install-block">
<code>npx skills add Forward-Future/loop-library --skill loop-library -g</code>
<code>npx skills add Forward-Future/loop-library --skill loopy -g</code>
</div>
<p>
Installing the skill still does not grant runtime permissions or
Installing Loopy still does not grant runtime permissions or
authorize consequential actions.
</p>
<p>
Existing <code>loop-library</code> installations remain supported
through a compatibility alias. New installations should use
<code>loopy</code>.
</p>
</section>

<footer class="article-footer">
Expand Down
14 changes: 7 additions & 7 deletions site/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -242,10 +242,10 @@
<a href="./learn/">Learn</a>
<a href="./agents/">For agents</a>
<a
href="https://github.com/Forward-Future/loop-library/tree/main/skills/loop-library"
href="https://github.com/Forward-Future/loop-library/tree/main/skills/loopy"
target="_blank"
rel="noopener noreferrer"
aria-label="Loop Library skill on GitHub"
aria-label="Loopy skill on GitHub"
>
Skill
</a>
Expand Down Expand Up @@ -273,10 +273,10 @@
<a href="./learn/">Learn</a>
<a href="./agents/">For agents</a>
<a
href="https://github.com/Forward-Future/loop-library/tree/main/skills/loop-library"
href="https://github.com/Forward-Future/loop-library/tree/main/skills/loopy"
target="_blank"
rel="noopener noreferrer"
aria-label="Loop Library skill on GitHub"
aria-label="Loopy skill on GitHub"
>
Skill
</a>
Expand Down Expand Up @@ -320,17 +320,17 @@ <h1>Loop Library</h1>
<div class="skill-promo-copy">
<p class="skill-promo-kicker">Agent skill</p>
<h2 id="agent-skill-title">
Use Loop Library in your coding agent.
Use Loopy in your coding agent.
</h2>
<p>
Send an agent to the live guide, or install the skill for guided
Send an agent to the live guide, or install Loopy for guided
finding, auditing, adapting, and loop design.
</p>
</div>

<div class="skill-promo-actions">
<code class="skill-install-command" data-skill-install-command
>npx skills add Forward-Future/loop-library --skill loop-library
>npx skills add Forward-Future/loop-library --skill loopy
-g</code
>
<div class="skill-action-row">
Expand Down
8 changes: 4 additions & 4 deletions site/learn/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -133,10 +133,10 @@
<a href="./" aria-current="page">Learn</a>
<a href="../agents/">For agents</a>
<a
href="https://github.com/Forward-Future/loop-library/tree/main/skills/loop-library"
href="https://github.com/Forward-Future/loop-library/tree/main/skills/loopy"
target="_blank"
rel="noopener noreferrer"
aria-label="Loop Library skill on GitHub"
aria-label="Loopy skill on GitHub"
>
Skill
</a>
Expand Down Expand Up @@ -164,10 +164,10 @@
<a href="./" aria-current="page">Learn</a>
<a href="../agents/">For agents</a>
<a
href="https://github.com/Forward-Future/loop-library/tree/main/skills/loop-library"
href="https://github.com/Forward-Future/loop-library/tree/main/skills/loopy"
target="_blank"
rel="noopener noreferrer"
aria-label="Loop Library skill on GitHub"
aria-label="Loopy skill on GitHub"
>
Skill
</a>
Expand Down
8 changes: 6 additions & 2 deletions skills/loop-library/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
---
name: loop-library
description: Discover, find, compare, audit, repair, adapt, and design repeatable AI-agent loops with explicit triggers, actions, verification, stopping conditions, guardrails, and handoffs. Use when a user asks to analyze a codebase for potential loops, mine coding-thread history for work done more than once, turn repeated engineering work into a loop, find or recommend a published loop, create a recurring agent workflow or automation cadence, turn an outcome into a bounded copy-ready loop, or review an existing loop for weak checks, unsafe authority, unbounded repetition, stale state, or unclear stopping behavior.
description: Compatibility alias for Loopy. Use only when an existing installation or older instruction explicitly invokes loop-library; use Loopy for new installations and requests. Provides the same discovery, recommendation, audit, repair, adaptation, and bounded loop-design workflows.
---

# Loop Library
# Loop Library (legacy alias)

`loop-library` is the compatibility name for Loopy. Complete the user's request
with this workflow. Use `loopy`, `$loopy`, or `/loopy` for new installations
and explicit invocations.

Help the user discover loop opportunities in existing engineering work, reuse a
published Loop Library loop when one fits, audit or repair an existing loop, or
Expand Down
Loading
Loading