diff --git a/AGENTS.md b/AGENTS.md index 363ed2d..24b49d4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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 diff --git a/README.md b/README.md index 61d379a..de698b1 100644 --- a/README.md +++ b/README.md @@ -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 @@ -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 @@ -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 \ @@ -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 | @@ -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. @@ -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; diff --git a/scripts/check.mjs b/scripts/check.mjs index a41b403..d395fbd 100644 --- a/scripts/check.mjs +++ b/scripts/check.mjs @@ -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, @@ -28,6 +29,7 @@ const [ skillSource, skillInterface, skillDiscovery, + legacySkillSource, readme, agents, ] = await Promise.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"), ]); @@ -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); } @@ -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")); @@ -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")); diff --git a/site/agents/index.html b/site/agents/index.html index ff8c9db..fb97b71 100644 --- a/site/agents/index.html +++ b/site/agents/index.html @@ -135,10 +135,10 @@ Learn For agents Skill @@ -166,10 +166,10 @@ Learn For agents Skill @@ -186,7 +186,7 @@

Use Loop Library directly.

verified context, and stay inside the user’s authority.

- 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.

@@ -246,18 +246,23 @@

Choose the right format

-

Install the full skill

+

Install Loopy

- 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.

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

- Installing the skill still does not grant runtime permissions or + Installing Loopy still does not grant runtime permissions or authorize consequential actions.

+

+ Existing loop-library installations remain supported + through a compatibility alias. New installations should use + loopy. +