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: 4 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
duplicate.

Create the Cloudflare Turnstile widget in Managed mode and allow both
`signals.forwardfuture.ai` and the current backing `*.here.now` hostname. Keep
`signals.forwardfuture.com` and the current backing `*.here.now` hostname. Keep
the site's Turnstile appearance set to `interaction-only` so most visitors do
not see a challenge.

Expand All @@ -89,7 +89,7 @@ npm run deploy
```

`TURNSTILE_HOSTNAMES` is a comma-separated exact allowlist containing
`signals.forwardfuture.ai` and the current backing `*.here.now` hostname.
`signals.forwardfuture.com` and the current backing `*.here.now` hostname.

## Authenticated voting

Expand Down Expand Up @@ -119,7 +119,7 @@ npm run deploy
```

- Register this exact provider callback:
`https://signals.forwardfuture.ai/loop-library/auth/callback/github`.
`https://signals.forwardfuture.com/loop-library/auth/callback/github`.
- For auth or proxy changes, set `VOTING_UI_ENABLED` to the exact string
`false` for the staged production release. Vote controls render hidden and
disabled, then appear only when `/api/votes` returns `uiEnabled: true`;
Expand Down Expand Up @@ -179,6 +179,6 @@ curl -sS "https://here.now/api/v1/publishes/{slug}/data/weekly_signups?limit=50"
database content and the backing here.now Site for the static shell before
reporting success.
- After a production content deployment, submit
`https://signals.forwardfuture.ai/loop-library/sitemap.xml` in Google Search
`https://signals.forwardfuture.com/loop-library/sitemap.xml` in Google Search
Console and Bing Webmaster Tools. Verify that the custom domain's root
`robots.txt` still allows Googlebot, Bingbot, and `OAI-SearchBot`.
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@ 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.ai/loop-library/) · shell in [`site/`](site/), database and rendering in [`worker/`](worker/) |
| **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/) |

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.

Agents that do not have the skill can use the published
[agent guide](https://signals.forwardfuture.ai/loop-library/agents/),
[agent instructions](https://signals.forwardfuture.ai/loop-library/llms.txt),
[JSON catalog](https://signals.forwardfuture.ai/loop-library/catalog.json), or
[plain-text catalog](https://signals.forwardfuture.ai/loop-library/catalog.txt)
[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
[plain-text catalog](https://signals.forwardfuture.com/loop-library/catalog.txt)
directly.

Each published loop tells an agent what to do, how to check its work, what to
Expand Down Expand Up @@ -206,11 +206,11 @@ Every published loop also includes a few useful parts:

## Explore or contribute

Visit the [Loop Library](https://signals.forwardfuture.ai/loop-library/) to
Visit the [Loop Library](https://signals.forwardfuture.com/loop-library/) to
browse published loops, copy one into your own workflow, or submit a loop that
has worked well for you.

Loop Library is a [Forward Future](https://www.forwardfuture.ai/) project and is
Loop Library is a [Forward Future](https://www.forwardfuture.com/) project and is
available under the [MIT License](LICENSE).

<details>
Expand Down
10 changes: 5 additions & 5 deletions scripts/check.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,9 @@ for (const value of [
'id="loop-sort"',
'id="library-pagination"',
'name="loop-library-form-api"',
"https://signals.forwardfuture.ai/loop-library/catalog.json",
"https://signals.forwardfuture.ai/loop-library/sitemap.xml",
"https://signals.forwardfuture.ai/loop-library/feed.xml",
"https://signals.forwardfuture.com/loop-library/catalog.json",
"https://signals.forwardfuture.com/loop-library/sitemap.xml",
"https://signals.forwardfuture.com/loop-library/feed.xml",
"https://here.now/r/signals",
]) {
assert(html.includes(value), value);
Expand Down Expand Up @@ -246,9 +246,9 @@ assert.match(wrangler.vars.BOOTSTRAP_CATALOG_DIGEST, /^[a-f0-9]{64}$/);
assert.equal(wrangler.vars.BOOTSTRAP_LOOP_COUNT, "50");
assert.equal(wrangler.vars.PUBLIC_ORIGIN_URL, "https://calm-mortar-jtek.here.now/");
assert.equal(wrangler.vars.PUBLIC_SHELL_URL, "https://calm-mortar-jtek.here.now/index.html");
assert.equal(wrangler.vars.PUBLIC_SITE_HOSTNAME, "signals.forwardfuture.ai");
assert.equal(wrangler.vars.PUBLIC_SITE_HOSTNAME, "signals.forwardfuture.com");
assert.equal(wrangler.vars.PUBLIC_SITE_PATH, "/loop-library");
assert.equal(wrangler.vars.VOTING_UI_ENABLED, "true");
assert.equal(wrangler.vars.VOTING_UI_ENABLED, "false");
assert.deepEqual(Object.keys(proxyManifest.proxies).sort(), [
"/",
"/api/loops",
Expand Down
22 changes: 11 additions & 11 deletions site/agents/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -42,38 +42,38 @@
/>
<meta
property="og:url"
content="https://signals.forwardfuture.ai/loop-library/agents/"
content="https://signals.forwardfuture.com/loop-library/agents/"
/>
<meta
property="og:image"
content="https://signals.forwardfuture.ai/loop-library/assets/ff-mark.png"
content="https://signals.forwardfuture.com/loop-library/assets/ff-mark.png"
/>
<link
rel="canonical"
href="https://signals.forwardfuture.ai/loop-library/agents/"
href="https://signals.forwardfuture.com/loop-library/agents/"
/>
<link
rel="sitemap"
type="application/xml"
href="https://signals.forwardfuture.ai/loop-library/sitemap.xml"
href="https://signals.forwardfuture.com/loop-library/sitemap.xml"
/>
<link
rel="alternate"
type="application/json"
title="Loop Library catalog"
href="https://signals.forwardfuture.ai/loop-library/catalog.json"
href="https://signals.forwardfuture.com/loop-library/catalog.json"
/>
<link
rel="alternate"
type="text/plain"
title="Loop Library agent instructions"
href="https://signals.forwardfuture.ai/loop-library/llms.txt"
href="https://signals.forwardfuture.com/loop-library/llms.txt"
/>
<link
rel="alternate"
type="text/plain"
title="Loop Library plain-text catalog"
href="https://signals.forwardfuture.ai/loop-library/catalog.txt"
href="https://signals.forwardfuture.com/loop-library/catalog.txt"
/>
<link rel="icon" type="image/png" href="../assets/favicon.png" />
<link rel="stylesheet" href="../styles.css?v=20260623-row-background-v2" />
Expand All @@ -84,11 +84,11 @@
"@type": "TechArticle",
"headline": "Loop Library Agent Guide",
"description": "Agent instructions for discovering, selecting, adapting, and safely running published Loop Library workflows.",
"url": "https://signals.forwardfuture.ai/loop-library/agents/",
"url": "https://signals.forwardfuture.com/loop-library/agents/",
"publisher": {
"@type": "Organization",
"name": "Forward Future",
"url": "https://forwardfuture.ai/"
"url": "https://forwardfuture.com/"
}
}
</script>
Expand Down Expand Up @@ -203,7 +203,7 @@ <h2 id="agent-start">Give this to an agent</h2>
</button>
</div>
<p data-prompt>
Read https://signals.forwardfuture.ai/loop-library/llms.txt, then use
Read https://signals.forwardfuture.com/loop-library/llms.txt, then use
the live catalog to find the best published loop for my goal. Match
on available inputs, tools, verification, authority, and stopping
condition. Do not execute a loop until I ask. Never invent missing
Expand Down Expand Up @@ -272,7 +272,7 @@ <h2 id="install-title">Install the full skill</h2>
<div class="footer-actions">
<p>
<a href="../">Loop Library</a>
<a href="https://forwardfuture.ai/" rel="noopener">forwardfuture.ai</a>
<a href="https://forwardfuture.com/" rel="noopener">forwardfuture.com</a>
<span>&copy; 2026</span>
</p>
<a
Expand Down
54 changes: 27 additions & 27 deletions site/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,15 @@
/>
<meta
property="og:url"
content="https://signals.forwardfuture.ai/loop-library/"
content="https://signals.forwardfuture.com/loop-library/"
/>
<meta
property="og:image"
content="https://signals.forwardfuture.ai/loop-library/assets/social/loop-library-20260621-2.png"
content="https://signals.forwardfuture.com/loop-library/assets/social/loop-library-20260621-2.png"
/>
<meta
property="og:image:secure_url"
content="https://signals.forwardfuture.ai/loop-library/assets/social/loop-library-20260621-2.png"
content="https://signals.forwardfuture.com/loop-library/assets/social/loop-library-20260621-2.png"
/>
<meta property="og:image:type" content="image/png" />
<meta
Expand All @@ -82,54 +82,54 @@
/>
<meta
name="twitter:image"
content="https://signals.forwardfuture.ai/loop-library/assets/social/loop-library-20260621-2.png"
content="https://signals.forwardfuture.com/loop-library/assets/social/loop-library-20260621-2.png"
/>
<meta
name="twitter:image:alt"
content="Loop Library — repeatable AI agent workflows from Forward Future"
/>
<link
rel="canonical"
href="https://signals.forwardfuture.ai/loop-library/"
href="https://signals.forwardfuture.com/loop-library/"
/>
<link
rel="sitemap"
type="application/xml"
href="https://signals.forwardfuture.ai/loop-library/sitemap.xml"
href="https://signals.forwardfuture.com/loop-library/sitemap.xml"
/>
<link
rel="alternate"
type="application/atom+xml"
title="Loop Library updates"
href="https://signals.forwardfuture.ai/loop-library/feed.xml"
href="https://signals.forwardfuture.com/loop-library/feed.xml"
/>
<link
rel="alternate"
type="application/json"
title="Loop Library catalog"
href="https://signals.forwardfuture.ai/loop-library/catalog.json"
href="https://signals.forwardfuture.com/loop-library/catalog.json"
/>
<link
rel="alternate"
type="text/markdown"
title="Loop Library catalog in Markdown"
href="https://signals.forwardfuture.ai/loop-library/catalog.md"
href="https://signals.forwardfuture.com/loop-library/catalog.md"
/>
<link
rel="alternate"
type="text/plain"
title="Loop Library agent instructions"
href="https://signals.forwardfuture.ai/loop-library/llms.txt"
href="https://signals.forwardfuture.com/loop-library/llms.txt"
/>
<link
rel="alternate"
type="text/plain"
title="Loop Library plain-text catalog"
href="https://signals.forwardfuture.ai/loop-library/catalog.txt"
href="https://signals.forwardfuture.com/loop-library/catalog.txt"
/>
<link
rel="help"
href="https://signals.forwardfuture.ai/loop-library/agents/"
href="https://signals.forwardfuture.com/loop-library/agents/"
/>
<link rel="icon" type="image/png" href="./assets/favicon.png" />
<link rel="stylesheet" href="./styles.css?v=20260623-row-background-v2" />
Expand All @@ -139,44 +139,44 @@
"@graph": [
{
"@type": "Organization",
"@id": "https://signals.forwardfuture.ai/loop-library/#organization",
"@id": "https://signals.forwardfuture.com/loop-library/#organization",
"name": "Forward Future",
"url": "https://forwardfuture.ai/",
"url": "https://forwardfuture.com/",
"logo": {
"@type": "ImageObject",
"url": "https://signals.forwardfuture.ai/loop-library/assets/ff-mark.png",
"url": "https://signals.forwardfuture.com/loop-library/assets/ff-mark.png",
"width": 1920,
"height": 1920
}
},
{
"@type": "WebSite",
"@id": "https://signals.forwardfuture.ai/loop-library/#website",
"url": "https://signals.forwardfuture.ai/loop-library/",
"@id": "https://signals.forwardfuture.com/loop-library/#website",
"url": "https://signals.forwardfuture.com/loop-library/",
"name": "Loop Library",
"description": "Practical AI agent workflows for engineering, research, editorial work, evaluation, and operations.",
"publisher": {
"@id": "https://signals.forwardfuture.ai/loop-library/#organization"
"@id": "https://signals.forwardfuture.com/loop-library/#organization"
}
},
{
"@type": "CollectionPage",
"@id": "https://signals.forwardfuture.ai/loop-library/#collection",
"url": "https://signals.forwardfuture.ai/loop-library/",
"@id": "https://signals.forwardfuture.com/loop-library/#collection",
"url": "https://signals.forwardfuture.com/loop-library/",
"name": "Loop Library",
"description": "A practical library of repeatable AI agent workflows with clear checks and stopping conditions.",
"dateModified": "2026-06-21",
"primaryImageOfPage": {
"@type": "ImageObject",
"url": "https://signals.forwardfuture.ai/loop-library/assets/social/loop-library-20260621-2.png",
"url": "https://signals.forwardfuture.com/loop-library/assets/social/loop-library-20260621-2.png",
"width": 1200,
"height": 630
},
"isPartOf": {
"@id": "https://signals.forwardfuture.ai/loop-library/#website"
"@id": "https://signals.forwardfuture.com/loop-library/#website"
},
"about": {
"@id": "https://signals.forwardfuture.ai/loop-library/#ai-agent-loop"
"@id": "https://signals.forwardfuture.com/loop-library/#ai-agent-loop"
},
"mainEntity": {
"@type": "ItemList",
Expand All @@ -186,10 +186,10 @@
},
{
"@type": "DefinedTerm",
"@id": "https://signals.forwardfuture.ai/loop-library/#ai-agent-loop",
"@id": "https://signals.forwardfuture.com/loop-library/#ai-agent-loop",
"name": "AI agent loop",
"description": "A repeatable workflow in which an AI agent acts on a goal, checks the result, and continues until it reaches an explicit success or stop condition.",
"url": "https://signals.forwardfuture.ai/loop-library/learn/",
"url": "https://signals.forwardfuture.com/loop-library/learn/",
"sameAs": [
"https://code.claude.com/docs/en/agent-sdk/agent-loop",
"https://arxiv.org/abs/2210.03629"
Expand Down Expand Up @@ -298,7 +298,7 @@ <h1>Loop Library</h1>
type="button"
data-copy-social-post
data-post-text="Find Loops and create your own - Loop Library"
data-post-url="https://signals.forwardfuture.ai/loop-library/"
data-post-url="https://signals.forwardfuture.com/loop-library/"
aria-label="Copy a Loop Library social post"
>
<svg class="share-copy-icon" viewBox="0 0 24 24" aria-hidden="true">
Expand Down Expand Up @@ -673,7 +673,7 @@ <h2>Share a loop</h2>
<p><strong>Forward Future</strong> <span>Make the future legible.</span></p>
<div class="footer-actions">
<p>
<a href="https://forwardfuture.ai/" rel="noopener">forwardfuture.ai</a>
<a href="https://forwardfuture.com/" rel="noopener">forwardfuture.com</a>
<span>&copy; 2026</span>
</p>
<a
Expand Down
Loading
Loading