# Loopmaster llms-full.txt Generated deterministically from repo artifacts during the site build. Do not edit by hand. ## Site fetch contract - Agent entry point: https://loopmaster-ai.pages.dev/llms.txt - Full context: https://loopmaster-ai.pages.dev/llms-full.txt - Registry JSON: https://loopmaster-ai.pages.dev/registry/index.json - Skill catalog: https://loopmaster-ai.pages.dev/skills/index.json - Agent guide: https://loopmaster-ai.pages.dev/agent-guide - Spec page: https://loopmaster-ai.pages.dev/spec An agent with only the site URL can reach a template manifest in three fetches: 1. https://loopmaster-ai.pages.dev/llms.txt 2. https://loopmaster-ai.pages.dev/registry/index.json 3. https://loopmaster-ai.pages.dev/templates/research-watch/loop.yaml ## BEGIN llms.txt # Loopmaster Loopmaster is a repository of agent-readable loop workflow templates: recurring AI work patterns that can be discovered, installed, verified, and maintained from checked-in manifests and docs. Usage contract for agents: - To create a new loop from a manual workflow, fetch `skills/authoring/loopify/SKILL.md` or the public `/skills/loopify/SKILL.md`, start with its Q&A intake, ask only for missing details, and do not schedule, publish, spend, request credential values, or make destructive changes until the human approves. - Treat `https://loopmaster-ai.pages.dev/registry/index.json` as the structured catalog and generated source of truth for available loop templates, self-maintenance loops, skill packs, and verification status. - Before installing a loop, read that template's `loop.yaml` and `AGENT-INSTALL.md` exactly; the manifest defines what is allowed, required, verified, and human-gated, while the install doc maps the manifest to concrete commands. - Do not claim a template is verified unless the registry entry says so and the evidence link is still current. Draft or unverified entries may be explored, but not represented as proven installs. - Respect every `permissions`, `human_gates`, and `failure_policy` field. Escalate instead of guessing when a gate fires, credentials are missing, or verification fails. - Never read or expose credentials beyond the scopes declared by the manifest and install guide. Fast fetch path from only the site URL: 1. Fetch this file: `https://loopmaster-ai.pages.dev/llms.txt`. 2. Fetch the catalog: `https://loopmaster-ai.pages.dev/registry/index.json`. 3. Pick a template and fetch its `manifest_path`, for example `https://loopmaster-ai.pages.dev/templates/research-watch/loop.yaml`. Primary site artifacts: - Catalog: `https://loopmaster-ai.pages.dev/registry/index.json` - Loop spec: `https://loopmaster-ai.pages.dev/spec` - JSON Schema: `https://loopmaster-ai.pages.dev/spec/loop.schema.json` - Template directories: `https://loopmaster-ai.pages.dev/loops` - Self-maintenance loops: `https://loopmaster-ai.pages.dev/loops` - Skill packs: `https://loopmaster-ai.pages.dev/skills` - Resource library: `https://loopmaster-ai.pages.dev/resources` - Resource rubric: `https://loopmaster-ai.pages.dev/resources/rubric` - Agent guide: `https://loopmaster-ai.pages.dev/agent-guide` Current first-template path: - `https://loopmaster-ai.pages.dev/templates/research-watch/loop.yaml` - `https://loopmaster-ai.pages.dev/templates/research-watch/AGENT-INSTALL.md` - `https://loopmaster-ai.pages.dev/templates/research-watch/README.md` Public-site paths: - `/llms.txt` - `/llms-full.txt` - `/registry/index.json` - `/agent-guide` - `/spec` - `/loops` - `/skills` - `/resources` All repo-relative artifact paths exposed here are also served under https://loopmaster-ai.pages.dev/. Prefer the site URLs when starting from the public site. Quickstart for agents: https://loopmaster-ai.pages.dev/quickstart Skill catalog: https://loopmaster-ai.pages.dev/skills/index.json Per-skill instructions: https://loopmaster-ai.pages.dev/skills//SKILL.md Expanded context: https://loopmaster-ai.pages.dev/llms-full.txt Three-fetch site proof: 1. GET https://loopmaster-ai.pages.dev/llms.txt 2. GET https://loopmaster-ai.pages.dev/registry/index.json 3. GET https://loopmaster-ai.pages.dev/templates/research-watch/loop.yaml ## END llms.txt ## BEGIN spec/loop-spec-v0.1.md # Loopmaster `loop.yaml` Specification v0.1 Status: draft This document defines the draft v0.1 Loopmaster loop manifest format. It is descriptive and backend-agnostic: a manifest declares what a loop needs, may do, must verify, and when it must escalate; backend-specific install instructions live in adjacent docs and in the `backends` hint section. v0.1 remains draft until LM-RETRO-01. Template authors MAY propose changes while the first Phase 0 templates are being written. Consumers MUST NOT treat v0.1 as frozen until the retro explicitly freezes it. ## 1. Conformance language The key words MUST, MUST NOT, REQUIRED, SHOULD, SHOULD NOT, MAY, and OPTIONAL are to be interpreted as normative requirements for v0.1 manifests. A conforming manifest: - MUST be named `loop.yaml` for templates, or `.loop.yaml` for Loopmaster's own maintenance loops. - MUST validate against `spec/loop.schema.json`. - MUST set `spec_version` to the string `"0.1"`. - MUST NOT include unknown top-level keys. - MUST include at least one permission in `permissions.allowed_actions`. - SHOULD keep field values short enough for an agent to read the whole manifest in one context window. - SHOULD keep prose documentation and manifest fields consistent: every operational claim in prose should map to a manifest field, and every manifest field should be explained by the human or agent install docs. ## 2. Manifest shape Top-level fields are deliberately small and stable. Optional fields are omitted when they do not add useful installation or safety information. | Field | Type | Required | Example | Definition | |---|---|---:|---|---| | `spec_version` | string | yes | `"0.1"` | Manifest spec version. v0.1 manifests MUST use the exact string `"0.1"`. | | `id` | string | yes | `research-watch` | Stable kebab-case identifier. It SHOULD match the template directory name. | | `name` | string | yes | `Research Watch Loop` | Human-readable display name. | | `purpose` | string | yes | `Monitor sources and turn high-signal changes into cited findings or tasks.` | One-sentence description of the loop's job and outcome. | | `audience` | array of enum strings | yes | `[human, agent]` | Primary consumers. Allowed values: `human`, `agent`, `operator`, `team`. | | `trigger` | object | yes | `{type: schedule, default: daily}` | What starts the loop. See §3. | | `inputs` | object | no | `{sources: [{type: rss}]}` | External sources, files, or environment variables the loop reads. See §4. | | `capabilities` | array of strings | no | `[polling, source_summarization, task_creation]` | Runtime or agent-harness capabilities needed to execute the loop. | | `permissions` | object | yes | `{allowed_actions: [read_web, write_report]}` | Actions the loop may and may not take. See §5. | | `state` | object | yes | `{paths: [.loopmaster/state/research-watch.json]}` | Durable state paths used for dedupe, memory, progress, or audit correlation. | | `outputs` | object | yes | `{artifacts: [docs/research/YYYY-MM-DD-findings.md]}` | Files, notifications, or tasks the loop emits. | | `verification` | object | yes | `{required: [every finding has a source URL], commands: [{run: python3 tools/check.py}]}` | Declarative success criteria plus executable checks. | | `human_gates` | object | yes | `{required_for: [public publishing]}` | Conditions that require a human or reviewer before acting. | | `failure_policy` | object | yes | `{retry: 2, escalate_after: repeated_provider_failure}` | Retry, escalation, and rollback behavior. | | `maintenance` | object | yes | `{freshness_cadence: weekly}` | How often the template or loop should be reviewed for rot. | | `backends` | object | yes | `{cron: {schedule: daily}}` | Runtime-specific install hints for supported backends. | ## 3. `trigger` `trigger` declares what starts the loop. It is a contract, not the scheduler implementation. | Field | Type | Required | Example | Definition | |---|---|---:|---|---| | `trigger.type` | enum string | yes | `schedule` | One of `schedule`, `webhook`, `manual`, `user_goal`, `ci_event`, `issue_event`, `feed_change`. | | `trigger.default` | string | no | `daily` | Human-readable default cadence or starter condition. | | `trigger.schedule` | string | no | `0 9 * * 1` | Concrete schedule hint when the trigger is schedule-like. | | `trigger.event` | string | no | `pull_request.failed_check` | Event name when the trigger is event-like. | ## 4. `inputs` `inputs` is OPTIONAL because some loops operate only on local state or a user goal. When present, it MUST contain at least one of the fields below. | Field | Type | Required | Example | Definition | |---|---|---:|---|---| | `inputs.sources` | array of source objects | no | `[{type: web_search, query: agent loop engineering}]` | External or internal systems the loop reads. | | `inputs.environment_variables` | array of strings | no | `[GITHUB_TOKEN]` | Environment variable names required by the loop. Values MUST NOT appear in the manifest. | | `inputs.files` | array of strings | no | `[resources/SOURCES.md]` | Repo-relative or documented runtime paths the loop reads. | Source object fields: | Field | Type | Required | Example | Definition | |---|---|---:|---|---| | `type` | enum string | yes | `rss` | One of `rss`, `web_search`, `github_repo`, `url`, `file`, `api`, `database`, `kanban`, `calendar`. | | `name` | string | no | `Anthropic engineering blog` | Human-readable source label. | | `url` | string | no | `https://www.anthropic.com/engineering` | Source URL. | | `query` | string | no | `agent loop engineering` | Search query or API query. | | `path` | string | no | `docs/research/loop-landscape.md` | File or state path. | ## 5. `permissions` `permissions` is REQUIRED because safety is part of the product. Empty permissions are invalid. | Field | Type | Required | Example | Definition | |---|---|---:|---|---| | `permissions.allowed_actions` | array of strings | yes | `[read_web, write_report, create_task]` | Actions the loop may perform autonomously. MUST contain at least one item. | | `permissions.forbidden_actions` | array of strings | no | `[publish_publicly_without_approval, spend_money]` | Actions the loop MUST NOT perform autonomously. | | `permissions.credential_scopes` | array of strings | no | `[read:repo, issues:write]` | Credential scopes needed. Names only; never include secret values. | ## 6. `state` `state` is REQUIRED so loops can dedupe, resume, and produce an audit trail. | Field | Type | Required | Example | Definition | |---|---|---:|---|---| | `state.paths` | array of strings | yes | `[.loopmaster/state/research-watch.json]` | Files or stores where durable loop state is written. | | `state.retention` | string | no | `90 days` | How long state should be kept before pruning or archiving. | ## 7. `outputs` `outputs` is REQUIRED and MUST contain at least one output category. | Field | Type | Required | Example | Definition | |---|---|---:|---|---| | `outputs.artifacts` | array of strings | no | `[docs/research/YYYY-MM-DD-findings.md]` | Files or structured artifacts the loop writes. | | `outputs.notifications` | array of strings | no | `[summary]` | Notifications the loop may send. | | `outputs.tasks` | array of strings | no | `[kanban_card_for_high_signal_finding]` | Task or issue outputs the loop may create. | ## 8. `verification` `verification` is REQUIRED. It combines human-readable assertions with commands that agents and CI can execute. | Field | Type | Required | Example | Definition | |---|---|---:|---|---| | `verification.required` | array of strings | yes | `[every finding has a source URL]` | Declarative acceptance criteria. | | `verification.commands` | array of command objects | yes | `[{name: validate findings, run: python3 tools/check_findings.py}]` | Executable checks. MUST contain at least one command. | Command object fields: | Field | Type | Required | Example | Definition | |---|---|---:|---|---| | `name` | string | no | `validate findings` | Human-readable check name. | | `run` | string | yes | `python3 tools/check_findings.py` | Command to execute from the documented working directory. | | `expected` | string | no | `exits 0 and prints OK` | Expected success signal. | ## 9. `human_gates` `human_gates` is REQUIRED. A loop that appears to need no approval SHOULD still declare the boundary that would make it unsafe. | Field | Type | Required | Example | Definition | |---|---|---:|---|---| | `human_gates.required_for` | array of strings | yes | `[public publishing, credential changes]` | Conditions that MUST stop for human or reviewer approval. | | `human_gates.approver` | string | no | `maintainer` | Role or person expected to approve gated actions. | ## 10. `failure_policy` `failure_policy` is REQUIRED so agents know when to retry and when to stop. | Field | Type | Required | Example | Definition | |---|---|---:|---|---| | `failure_policy.retry` | integer | yes | `2` | Maximum retry attempts before escalation. | | `failure_policy.escalate_after` | string | yes | `repeated_provider_failure` | Condition or class of failure that triggers escalation. | | `failure_policy.rollback` | string | no | `revert the proposal branch and leave the previous state file unchanged` | Rollback or recovery guidance. | ## 11. `maintenance` `maintenance` is REQUIRED because loop rot is an expected failure mode. | Field | Type | Required | Example | Definition | |---|---|---:|---|---| | `maintenance.freshness_cadence` | string | yes | `weekly` | How often to review this loop/template for source, API, model, or process drift. | | `maintenance.owner` | string | no | `Loopmaster maintainers` | Owner responsible for maintenance. | | `maintenance.audit_log` | string | no | `loops/log/` | Where maintenance evidence is recorded. | ## 12. `backends` `backends` is REQUIRED and MUST contain at least one supported backend hint. Hints are not executable adapters; they tell an installer where the manifest maps onto runtime-specific setup. Allowed backend keys in v0.1 are `cron`, `github_actions`, and `agent_kanban`. | Field | Type | Required | Example | Definition | |---|---|---:|---|---| | `backends.cron` | backend hint object | no | `{schedule: daily}` | Installation hints for cron-like schedulers. | | `backends.github_actions` | backend hint object | no | `{workflow: .github/workflows/research-watch.yml}` | Installation hints for GitHub Actions. | | `backends.agent_kanban` | backend hint object | no | `{task_template: Create a weekly research watch task}` | Installation hints for agent task boards such as Hermes kanban. | Backend hint fields: | Field | Type | Required | Example | Definition | |---|---|---:|---|---| | `schedule` | string | no | `daily` | Cadence or cron expression. | | `workflow` | string | no | `.github/workflows/research-watch.yml` | Workflow file or runtime entry point. | | `task_template` | string | no | `Create a weekly research-watch task assigned to researcher` | Task prompt or template hint. | | `install_notes` | array of strings | no | `[Run from repo root]` | Backend-specific setup notes. | ## 13. Worked example This example updates the R1 §7 research-watch manifest to v0.1. It is intentionally still a draft template shape, but it validates against `spec/loop.schema.json`. ```yaml spec_version: "0.1" id: research-watch name: Research Watch Loop purpose: Monitor sources and turn high-signal changes into cited findings or tasks. audience: [human, agent] trigger: type: schedule default: daily schedule: "0 9 * * *" inputs: sources: - type: rss name: practitioner blogs - type: web_search query: agent loop engineering - type: github_repo url: https://github.com/anthropics/claude-cookbooks capabilities: - polling - source_summarization - dedupe - task_creation permissions: allowed_actions: - read_web - write_report - create_task forbidden_actions: - publish_publicly_without_approval - spend_money - delete_user_data credential_scopes: - web:read - kanban:create state: paths: - .loopmaster/state/research-watch.json retention: 90 days outputs: artifacts: - docs/research/YYYY-MM-DD-findings.md notifications: - summary tasks: - kanban_card_for_high_signal_finding verification: required: - every finding has a source URL - no duplicate finding from previous state - recommendations include confidence/risk commands: - name: validate findings report run: python3 tools/validate_findings.py docs/research/YYYY-MM-DD-findings.md expected: exits 0 and prints OK human_gates: required_for: - public publishing - product direction changes - credential changes approver: maintainer failure_policy: retry: 2 escalate_after: repeated_provider_failure rollback: leave prior state file unchanged and report partial findings only maintenance: freshness_cadence: weekly owner: Loopmaster maintainers audit_log: loops/log/ backends: cron: schedule: daily install_notes: - Run from the repository root. github_actions: workflow: .github/workflows/research-watch.yml agent_kanban: task_template: Create a weekly research-watch task assigned to researcher. ``` ## 14. Versioning notes v0.1 is expected to change while the Phase 0 templates exercise it. Backward-incompatible changes SHOULD be recorded in `spec/CHANGELOG.md`. Unknown `spec_version` values MUST be rejected by v0.1 validators. ## END spec/loop-spec-v0.1.md ## BEGIN registry/index.json { "f2_skills": { "count": 2, "skill_packs": [ "loopify", "deploy-your-first-loop" ] }, "sample": false, "schema_version": "lm-reg-01", "skills": [ { "backends": [ "cron", "github_actions", "agent_kanban" ], "category": "authoring", "deploys_template": null, "description": "Use when a human describes a manual workflow and needs Q&A intake plus a draft Loopmaster loop bundle: loop.yaml, README, AGENT-INSTALL.md, verify.sh, and registry-entry instructions.", "group": "authoring", "id": "loopify", "name": "Loopify", "path": "skills/authoring/loopify/SKILL.md", "requirements": [ "repository checkout containing spec/loop.schema.json", "free-text workflow description or notes from the human operator", "optional artifacts such as scripts, checklists, sample inputs, or previous cron entries", "uv with pyyaml and jsonschema, or check-jsonschema with pyyaml, for manifest validation", "shell access for deterministic verify.sh dry-runs" ], "url": "https://loopmaster-ai.pages.dev/skills/loopify/SKILL.md", "verification": { "details": "no verification evidence found under verification/", "status": "unverified" } }, { "backends": [ "cron", "github_actions", "agent_kanban" ], "category": "authoring", "deploys_template": "research-watch", "description": "Use when an agent or human wants to deploy the research-watch Loopmaster template through cron, GitHub Actions, or agent-kanban and verify a running loop in one session.", "group": "getting-started", "id": "deploy-your-first-loop", "name": "Deploy Your First Loop", "path": "skills/getting-started/deploy-your-first-loop/SKILL.md", "requirements": [ "Python 3", "repository checkout containing templates/research-watch", "uv for manifest validation", "cron for the local scheduler backend, or GitHub Actions / Hermes kanban for alternate backends", "no web-search API key for the default research-watch run" ], "url": "https://loopmaster-ai.pages.dev/skills/deploy-your-first-loop/SKILL.md", "verification": { "date": "2026-07-07", "details": "positive dated skill verification evidence found", "evidence_path": "skills/getting-started/deploy-your-first-loop/verification/cron-scratch-transcript.md", "evidence_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/skills/getting-started/deploy-your-first-loop/verification/cron-scratch-transcript.md", "status": "verified" } } ], "templates": [ { "backends": [ "agent_kanban", "cron", "github_actions" ], "doc_path": "templates/agent-usability-test/README.md", "doc_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/agent-usability-test/README.md", "id": "agent-usability-test", "install_path": "templates/agent-usability-test/AGENT-INSTALL.md", "install_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/agent-usability-test/AGENT-INSTALL.md", "manifest_path": "templates/agent-usability-test/loop.yaml", "manifest_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/agent-usability-test/loop.yaml", "name": "Agent Usability Test Loop", "permissions": { "allowed_actions": [ "read_repo", "create_clean_checkout", "run_documented_commands", "write_transcript", "write_friction_report", "create_followup_task" ], "credential_scopes": [ "repo:read", "kanban:create" ], "forbidden_actions": [ "use_unlisted_project_context", "read_private_credentials", "mutate_source_repository_without_approval", "claim_verified_without_evidence", "publish_public_verified_badge_without_approval" ], "summary": "6 allowed action(s), 5 forbidden action(s), 2 credential scope(s)" }, "purpose": "Run a clean-room agent through template or site docs and turn transcript evidence into a pass/fail friction report.", "spec_version": "0.1", "trigger": { "default": "before claiming agent-install compatibility or after major template/site doc changes", "type": "manual" }, "triggers": [ "manual", "before claiming agent-install compatibility or after major template/site doc changes" ], "verification": { "age_days": 0, "date": "2026-07-07", "details": "positive dated evidence found", "evidence_path": "templates/agent-usability-test/verification/dry-run-checklist.md", "evidence_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/agent-usability-test/verification/dry-run-checklist.md", "rule": "positive verification evidence auto-stales after 30 days", "stale_after": "2026-08-06", "status": "verified" } }, { "backends": [ "agent_kanban", "cron", "github_actions" ], "doc_path": "templates/ci-repair/README.md", "doc_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/ci-repair/README.md", "id": "ci-repair", "install_path": "templates/ci-repair/AGENT-INSTALL.md", "install_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/ci-repair/AGENT-INSTALL.md", "manifest_path": "templates/ci-repair/loop.yaml", "manifest_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/ci-repair/loop.yaml", "name": "CI Repair Loop", "permissions": { "allowed_actions": [ "read_ci_status", "read_ci_logs", "read_repository_files", "run_local_tests", "modify_test_code", "propose_non_test_code_patch", "push_repair_branch", "open_pull_request", "create_follow_up_task" ], "credential_scopes": [ "repo:contents:write", "pull_request:write", "actions:read", "checks:read", "kanban:create" ], "forbidden_actions": [ "disable_required_checks_without_approval", "weaken_assertions_without_root_cause_evidence", "delete_failing_tests_to_make_ci_green", "mask_errors_with_blanket_retries_or_ignores", "merge_non_test_code_without_human_diff_review", "expose_credentials_in_logs_or_comments" ], "summary": "9 allowed action(s), 6 forbidden action(s), 5 credential scope(s)" }, "purpose": "Detect a failing CI signal, inspect the failure evidence, make the smallest justified patch, rerun verification, and open or update a pull request without masking the real issue.", "spec_version": "0.1", "trigger": { "default": "failing pull request or protected-branch check", "event": "check_suite_failure", "type": "ci_event" }, "triggers": [ "ci_event", "failing pull request or protected-branch check", "check_suite_failure" ], "verification": { "age_days": 0, "date": "2026-07-07", "details": "positive dated evidence found", "evidence_path": "templates/ci-repair/verification/dry-read-ambiguity-checklist.md", "evidence_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/ci-repair/verification/dry-read-ambiguity-checklist.md", "rule": "positive verification evidence auto-stales after 30 days", "stale_after": "2026-08-06", "status": "verified" } }, { "backends": [ "agent_kanban", "cron", "github_actions" ], "doc_path": "templates/content-freshness/README.md", "doc_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/content-freshness/README.md", "id": "content-freshness", "install_path": "templates/content-freshness/AGENT-INSTALL.md", "install_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/content-freshness/AGENT-INSTALL.md", "manifest_path": "templates/content-freshness/loop.yaml", "manifest_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/content-freshness/loop.yaml", "name": "Content Freshness Loop", "permissions": { "allowed_actions": [ "read_repo", "read_web", "write_report", "write_state", "create_proposal_branch", "create_task" ], "credential_scopes": [ "repo:contents:write", "pull_request:write", "kanban:create" ], "forbidden_actions": [ "publish_publicly_without_approval", "rewrite_content_without_review", "spend_money", "delete_user_data", "mutate_source_systems" ], "summary": "6 allowed action(s), 5 forbidden action(s), 3 credential scope(s)" }, "purpose": "Audit repository content for stale pages, dead links, superseded claims, and missing ownership evidence, then propose source-backed updates without publishing rewrites automatically.", "spec_version": "0.1", "trigger": { "default": "monthly", "schedule": "0 10 1 * *", "type": "schedule" }, "triggers": [ "schedule", "monthly", "0 10 1 * *" ], "verification": { "age_days": 0, "date": "2026-07-07", "details": "positive dated evidence found", "evidence_path": "templates/content-freshness/verification/dry-read-ambiguity-checklist.md", "evidence_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/content-freshness/verification/dry-read-ambiguity-checklist.md", "rule": "positive verification evidence auto-stales after 30 days", "stale_after": "2026-08-06", "status": "verified" } }, { "backends": [ "agent_kanban", "cron", "github_actions" ], "doc_path": "templates/dependency-release-monitor/README.md", "doc_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/dependency-release-monitor/README.md", "id": "dependency-release-monitor", "install_path": "templates/dependency-release-monitor/AGENT-INSTALL.md", "install_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/dependency-release-monitor/AGENT-INSTALL.md", "manifest_path": "templates/dependency-release-monitor/loop.yaml", "manifest_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/dependency-release-monitor/loop.yaml", "name": "Dependency Release Monitor Loop", "permissions": { "allowed_actions": [ "read_web", "read_repo", "read_file", "write_report", "write_state", "create_proposal_branch", "create_task" ], "credential_scopes": [ "repo:contents:write", "pull_request:write", "kanban:create" ], "forbidden_actions": [ "merge_dependency_changes_without_approval", "change_credentials_without_approval", "publish_publicly_without_approval", "spend_money", "delete_user_data", "mutate_upstream_projects" ], "summary": "7 allowed action(s), 6 forbidden action(s), 3 credential scope(s)" }, "purpose": "Watch upstream releases and changelogs for declared dependencies, assess project impact, and recommend act or ignore with confidence and risk.", "spec_version": "0.1", "trigger": { "default": "weekly", "schedule": "0 10 * * 1", "type": "schedule" }, "triggers": [ "schedule", "weekly", "0 10 * * 1" ], "verification": { "age_days": 0, "date": "2026-07-07", "details": "positive dated evidence found", "evidence_path": "templates/dependency-release-monitor/verification/dry-read-ambiguity-checklist.md", "evidence_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/dependency-release-monitor/verification/dry-read-ambiguity-checklist.md", "rule": "positive verification evidence auto-stales after 30 days", "stale_after": "2026-08-06", "status": "verified" } }, { "backends": [ "agent_kanban", "github_actions" ], "doc_path": "loops/README.md", "doc_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/loops/README.md", "id": "landscape-watch", "install_path": "loops/AGENT-INSTALL.md", "install_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/loops/AGENT-INSTALL.md", "manifest_path": "loops/landscape-watch.loop.yaml", "manifest_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/loops/landscape-watch.loop.yaml", "name": "Landscape Watch Loop", "permissions": { "allowed_actions": [ "read_web", "read_repo", "write_report", "write_state", "create_proposal_branch", "create_task" ], "credential_scopes": [ "repo:contents:write", "pull_request:write", "kanban:create" ], "forbidden_actions": [ "publish_publicly_without_approval", "spend_money", "delete_user_data", "mutate_source_systems", "change_public_positioning_without_approval" ], "summary": "6 allowed action(s), 5 forbidden action(s), 3 credential scope(s)" }, "purpose": "Loopmaster's own instance of the research-watch template. Polls the AI loop / agent-tooling landscape (frameworks, protocols, labs) weekly and turns new, high-signal changes into cited findings reports in docs/research/. Findings publish autonomously; public positioning or recommendation changes require human approval.\n", "spec_version": "0.1", "trigger": { "default": "weekly", "schedule": "30 9 * * 1", "type": "schedule" }, "triggers": [ "schedule", "weekly", "30 9 * * 1" ], "verification": { "details": "no positive verification evidence found under verification/", "rule": "positive verification evidence with a YYYY-MM-DD date is required and auto-stales after 30 days", "status": "unverified" } }, { "backends": [ "github_actions" ], "doc_path": "loops/README.md", "doc_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/loops/README.md", "id": "link-audit", "install_path": "loops/AGENT-INSTALL.md", "install_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/loops/AGENT-INSTALL.md", "manifest_path": "loops/link-audit.loop.yaml", "manifest_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/loops/link-audit.loop.yaml", "name": "Link & Source Audit Loop", "permissions": { "allowed_actions": [ "read_repo", "read_web", "write_report", "update_same_host_redirects", "stamp_resource_status" ], "credential_scopes": [ "contents:write_for_scheduled_report_commits" ], "forbidden_actions": [ "replace_sources_without_approval", "publish_publicly_without_approval", "spend_money", "change_credentials" ], "summary": "5 allowed action(s), 4 forbidden action(s), 1 credential scope(s)" }, "purpose": "Check Loopmaster documentation and resource URLs, update safe maintenance stamps, and escalate source replacement.", "spec_version": "0.1", "trigger": { "default": "weekly", "schedule": "23 10 * * 1", "type": "schedule" }, "triggers": [ "schedule", "weekly", "23 10 * * 1" ], "verification": { "age_days": 0, "date": "2026-07-07", "details": "positive dated evidence found", "evidence_path": "loops/log/2026-07-07-link-audit.md", "evidence_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/loops/log/2026-07-07-link-audit.md", "rule": "positive verification evidence auto-stales after 30 days", "stale_after": "2026-08-06", "status": "verified" } }, { "backends": [ "agent_kanban", "github_actions" ], "doc_path": "loops/README.md", "doc_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/loops/README.md", "id": "loopmaster-content-freshness", "install_path": "loops/AGENT-INSTALL.md", "install_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/loops/AGENT-INSTALL.md", "manifest_path": "loops/loopmaster-content-freshness.loop.yaml", "manifest_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/loops/loopmaster-content-freshness.loop.yaml", "name": "Loopmaster Content Freshness Loop", "permissions": { "allowed_actions": [ "read_repo", "read_web", "write_report", "write_state", "create_proposal_branch", "create_task" ], "credential_scopes": [ "repo:contents:write", "pull_request:write", "kanban:create" ], "forbidden_actions": [ "publish_publicly_without_approval", "rewrite_content_without_review", "change_public_positioning_without_approval", "spend_money", "delete_user_data", "mutate_source_systems" ], "summary": "6 allowed action(s), 6 forbidden action(s), 3 credential scope(s)" }, "purpose": "Audit Loopmaster's public docs, learning content, resource metadata, and loop guides for stale claims, broken links, and unresolved freshness markers; report proposals without rewriting public positioning autonomously.", "spec_version": "0.1", "trigger": { "default": "monthly", "schedule": "0 10 1 * *", "type": "schedule" }, "triggers": [ "schedule", "monthly", "0 10 1 * *" ], "verification": { "details": "no positive verification evidence found under verification/", "rule": "positive verification evidence with a YYYY-MM-DD date is required and auto-stales after 30 days", "status": "unverified" } }, { "backends": [ "agent_kanban", "cron", "github_actions" ], "doc_path": "templates/research-watch/README.md", "doc_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/research-watch/README.md", "id": "research-watch", "install_path": "templates/research-watch/AGENT-INSTALL.md", "install_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/research-watch/AGENT-INSTALL.md", "manifest_path": "templates/research-watch/loop.yaml", "manifest_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/research-watch/loop.yaml", "name": "Research Watch Loop", "permissions": { "allowed_actions": [ "read_web", "read_repo", "write_report", "write_state", "create_proposal_branch", "create_task" ], "credential_scopes": [ "repo:contents:write", "pull_request:write", "kanban:create" ], "forbidden_actions": [ "publish_publicly_without_approval", "spend_money", "delete_user_data", "mutate_source_systems" ], "summary": "6 allowed action(s), 4 forbidden action(s), 3 credential scope(s)" }, "purpose": "Monitor trusted sources and turn new, high-signal research changes into cited findings reports and optional follow-up tasks.", "spec_version": "0.1", "trigger": { "default": "weekly", "schedule": "0 9 * * 1", "type": "schedule" }, "triggers": [ "schedule", "weekly", "0 9 * * 1" ], "verification": { "age_days": 0, "date": "2026-07-07", "details": "positive dated evidence found", "evidence_path": "templates/research-watch/verification/dry-read-ambiguity-checklist.md", "evidence_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/templates/research-watch/verification/dry-read-ambiguity-checklist.md", "rule": "positive verification evidence auto-stales after 30 days", "stale_after": "2026-08-06", "status": "verified" } }, { "backends": [ "agent_kanban", "cron", "github_actions" ], "doc_path": "loops/README.md", "doc_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/loops/README.md", "id": "resource-discovery", "install_path": "loops/AGENT-INSTALL.md", "install_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/loops/AGENT-INSTALL.md", "manifest_path": "loops/resource-discovery.loop.yaml", "manifest_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/loops/resource-discovery.loop.yaml", "name": "Resource Discovery Loop", "permissions": { "allowed_actions": [ "read_web", "read_repo", "write_report", "write_state", "create_proposal_branch", "create_task" ], "credential_scopes": [ "repo:contents:write", "pull_request:write", "kanban:create" ], "forbidden_actions": [ "publish_publicly_without_approval", "merge_resource_entries_without_approval", "spend_money", "delete_user_data", "mutate_source_systems" ], "summary": "6 allowed action(s), 5 forbidden action(s), 3 credential scope(s)" }, "purpose": "Sweep committed sources and rotating queries each week, score candidates against the resource rubric, and propose ready-to-merge entries for the curated library without publishing them.", "spec_version": "0.1", "trigger": { "default": "weekly", "schedule": "30 9 * * 1", "type": "schedule" }, "triggers": [ "schedule", "weekly", "30 9 * * 1" ], "verification": { "details": "no positive verification evidence found under verification/", "rule": "positive verification evidence with a YYYY-MM-DD date is required and auto-stales after 30 days", "status": "unverified" } } ] } ## END registry/index.json ## BEGIN skills/index.json { "schema_version": "lm-skills-01", "skills": [ { "backends": [ "cron", "github_actions", "agent_kanban" ], "category": "authoring", "deploys_template": null, "id": "loopify", "name": "Loopify", "requirements": [ "repository checkout containing spec/loop.schema.json", "free-text workflow description or notes from the human operator", "optional artifacts such as scripts, checklists, sample inputs, or previous cron entries", "uv with pyyaml and jsonschema, or check-jsonschema with pyyaml, for manifest validation", "shell access for deterministic verify.sh dry-runs" ], "skill_url": "https://loopmaster-ai.pages.dev/skills/loopify/SKILL.md", "summary": "Use when a human describes a manual workflow and needs Q&A intake plus a draft Loopmaster loop bundle: loop.yaml, README, AGENT-INSTALL.md, verify.sh, and registry-entry instructions.", "verification": { "details": "no verification evidence found under verification/", "status": "unverified" } }, { "backends": [ "cron", "github_actions", "agent_kanban" ], "category": "authoring", "deploys_template": "research-watch", "id": "deploy-your-first-loop", "name": "Deploy Your First Loop", "requirements": [ "Python 3", "repository checkout containing templates/research-watch", "uv for manifest validation", "cron for the local scheduler backend, or GitHub Actions / Hermes kanban for alternate backends", "no web-search API key for the default research-watch run" ], "skill_url": "https://loopmaster-ai.pages.dev/skills/deploy-your-first-loop/SKILL.md", "summary": "Use when an agent or human wants to deploy the research-watch Loopmaster template through cron, GitHub Actions, or agent-kanban and verify a running loop in one session.", "verification": { "date": "2026-07-07", "details": "positive dated skill verification evidence found", "evidence_path": "skills/getting-started/deploy-your-first-loop/verification/cron-scratch-transcript.md", "evidence_url": "https://github.com/chrismaddern/loopmaster.ai/blob/main/skills/getting-started/deploy-your-first-loop/verification/cron-scratch-transcript.md", "status": "verified" } } ] } ## END skills/index.json ## BEGIN skill index - id: deploy-your-first-loop name: Deploy Your First Loop description: Use when an agent or human wants to deploy the research-watch Loopmaster template through cron, GitHub Actions, or agent-kanban and verify a running loop in one session. deploys_template: research-watch backends: cron, github_actions, agent_kanban skill_url: https://loopmaster-ai.pages.dev/skills/deploy-your-first-loop/SKILL.md - id: loopify name: Loopify description: Use when a human describes a manual workflow and needs Q&A intake plus a draft Loopmaster loop bundle: loop.yaml, README, AGENT-INSTALL.md, verify.sh, and registry-entry instructions. backends: cron, github_actions, agent_kanban skill_url: https://loopmaster-ai.pages.dev/skills/loopify/SKILL.md ## END skill index ## BEGIN docs/AGENT-GUIDE.md # Agent guide This guide is for agents that are given only the Loopmaster repository URL and need to choose, install, and verify a loop template without human hand-holding. Repository URL: - `https://github.com/chrismaddern/loopmaster.ai` Raw fetch base for direct file reads: - `https://raw.githubusercontent.com/chrismaddern/loopmaster.ai/main/` ## Six-step flow ### 1. Discover Fetch the agent entry point, then the generated catalog. Exact paths: - `llms.txt` - `registry/index.json` Raw URLs: - `https://raw.githubusercontent.com/chrismaddern/loopmaster.ai/main/llms.txt` - `https://raw.githubusercontent.com/chrismaddern/loopmaster.ai/main/registry/index.json` Use `llms.txt` for the repo usage contract and `registry/index.json` for structured fields: `id`, `name`, `purpose`, `triggers`, `permissions`, `verification`, `manifest_path`, `install_path`, and `doc_path`. ### 2. Select Match the user's goal against the catalog entry fields. Use these fields first: - `purpose` — what the loop is for. - `triggers` — when it should run. - `backends` — supported runtimes such as `cron`, `github_actions`, or `agent_kanban`. - `permissions.summary`, `permissions.allowed_actions`, `permissions.forbidden_actions`, and `permissions.credential_scopes` — whether the loop is safe and possible in the current environment. - `verification.status`, `verification.date`, and `verification.evidence_path` — whether the loop has current positive evidence. Do not silently substitute a different template. If no template matches the goal, report the gap or create an appropriately scoped follow-up task. ### 3. Read For the selected template, fetch both the machine contract and the install guide from the paths in the catalog. Example: research-watch. - Manifest path: `templates/research-watch/loop.yaml` - Install path: `templates/research-watch/AGENT-INSTALL.md` - Human guide path: `templates/research-watch/README.md` Raw URLs: - `https://raw.githubusercontent.com/chrismaddern/loopmaster.ai/main/templates/research-watch/loop.yaml` - `https://raw.githubusercontent.com/chrismaddern/loopmaster.ai/main/templates/research-watch/AGENT-INSTALL.md` - `https://raw.githubusercontent.com/chrismaddern/loopmaster.ai/main/templates/research-watch/README.md` Treat `loop.yaml` as the authority for what the loop may do. Treat `AGENT-INSTALL.md` as the authority for exact setup commands, expected outputs, and backend-specific wiring. ### 4. Install Create only the files, state paths, schedules, tasks, or workflow entries declared by the selected template and install guide. Before writing or scheduling anything, check: - `inputs` for required source files, environment variables, and runtime files. - `state.paths` for persistent state locations. - `outputs` for expected reports, notifications, and task creation. - `backends` for the chosen runtime's install notes. - `human_gates.required_for` for actions that require approval. If a credential is missing, do not invent it or broaden scope. Stop at the relevant human gate and report the exact missing scope. ### 5. Verify Run the selected template's `verification.commands` and check every `verification.required` assertion before reporting success. Example: research-watch manifest validation command from `templates/research-watch/loop.yaml`: ```sh uv run --with check-jsonschema --with pyyaml check-jsonschema --schemafile spec/loop.schema.json templates/research-watch/loop.yaml ``` Example: research-watch local dry run from the same manifest: ```sh python3 templates/research-watch/scripts/research_watch.py --sources templates/research-watch/examples/dry-run-sources.json --state /tmp/loopmaster-research-watch-state.json --output-dir /tmp/loopmaster-research-watch --max-items 5 ``` A successful install report should name the commands run, exit codes, key output paths, and any assertions that could not be checked. ### 6. Escalate Escalate instead of guessing when any of these happen: - A `human_gates.required_for` action is needed. - A required credential or permission scope is missing. - A verification command fails. - The template asks to spend money, publish publicly, delete data, mutate source systems, or change public positioning. - The install guide and manifest disagree. - The registry marks the chosen entry `unverified` or its evidence is stale, and the user asked for a proven loop. When escalating, include the selected template id, the exact path or field that caused the stop, what was already fetched, and the next safe action. ## Three-fetch manifest reachability test An agent with only the repository URL can reach a chosen template manifest in three fetches: 1. `GET https://raw.githubusercontent.com/chrismaddern/loopmaster.ai/main/llms.txt` 2. `GET https://raw.githubusercontent.com/chrismaddern/loopmaster.ai/main/registry/index.json` 3. Read `templates[].manifest_path` for the chosen id, then `GET https://raw.githubusercontent.com/chrismaddern/loopmaster.ai/main/`. For `research-watch`, fetch 3 is: - `https://raw.githubusercontent.com/chrismaddern/loopmaster.ai/main/templates/research-watch/loop.yaml` The same pattern works for every catalog entry that includes `manifest_path`. ## END docs/AGENT-GUIDE.md