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 .github/workflows/agentify-lane-fixtures.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ name: agentify-lane-fixtures
on:
pull_request:
paths:
- "plugins/e2a/agentify/templates/runtime-skill/**"
- "plugins/e2a/agentify/test/fixtures/**"
- "plugins/e2a/skills/agentify/templates/runtime-skill/**"
- "plugins/e2a/skills/agentify/test/fixtures/**"
- ".github/workflows/agentify-lane-fixtures.yml"
workflow_dispatch: {}

Expand All @@ -28,9 +28,9 @@ jobs:
- name: Install Claude Code + harness deps
run: |
npm install -g @anthropic-ai/claude-code
npm install --prefix plugins/e2a/agentify/test/fixtures/harness
npm install --prefix plugins/e2a/skills/agentify/test/fixtures/harness
- name: Run lane fixtures
env:
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: bash plugins/e2a/agentify/test/fixtures/run-fixtures.sh
run: bash plugins/e2a/skills/agentify/test/fixtures/run-fixtures.sh
8 changes: 4 additions & 4 deletions .github/workflows/agentify-test.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# Tests for the agentify feedback-loop framework (plugins/e2a/agentify).
# Tests for the agentify feedback-loop framework (plugins/e2a/skills/agentify).
# Deterministic: script selftests + addon unit tests + static/YAML/config
# validation. No secrets, no network — runs on every PR that touches it.
name: agentify-test

on:
push:
paths: ["plugins/e2a/agentify/**", ".github/workflows/agentify-test.yml"]
paths: ["plugins/e2a/skills/agentify/**", ".github/workflows/agentify-test.yml"]
pull_request:
paths: ["plugins/e2a/agentify/**", ".github/workflows/agentify-test.yml"]
paths: ["plugins/e2a/skills/agentify/**", ".github/workflows/agentify-test.yml"]

permissions:
contents: read
Expand All @@ -24,4 +24,4 @@ jobs:
- name: Install PyYAML (for config validation)
run: pip install --quiet pyyaml
- name: Run the agentify test suite
run: bash plugins/e2a/agentify/test/run.sh
run: bash plugins/e2a/skills/agentify/test/run.sh
27 changes: 13 additions & 14 deletions docs/design/autonomous-repo-framework.md
Original file line number Diff line number Diff line change
Expand Up @@ -241,9 +241,9 @@ runtime generic without a code plugin system.

### 4.5 Deploy skill (`/agentify`)

Bundle layout (home: `plugins/e2a/agentify/` for v0):
Bundle layout (home: `plugins/e2a/skills/agentify/`):
```
agentify/SKILL.md # the deploy procedure (the only thing that "runs")
skills/agentify/SKILL.md # the deploy procedure (the only thing that "runs")
templates/workflows/*.yml.tmpl # triage, fix, comms, released
templates/autonomous-repo.config.yml.tmpl
templates/runtime-skill/** # SKILL.md, triage.md, fix.md, comms.md, email-templates/
Expand Down Expand Up @@ -404,7 +404,7 @@ v0; `always_hitl` safety valve **on** even when `mode: auto`.
auto | hitl`. `auto` = triage opens a PR directly; `hitl` (e2a default) =
triage emails the approver, and a verified approval reply triggers the PR.
PR merge stays the ship gate in both. Remaining sub-decisions in §4.7.
4. **Build location** — inside `e2a/plugins/e2a/agentify` first then extract to a
4. **Build location** — inside `e2a/plugins/e2a/skills/agentify` first then extract to a
standalone repo at the second real adopter (recommended; extract-after-second-use),
vs standalone from day one (purer framework-first).
5. **Shared-source for the runtime skill across adopters** — vendored copy (deploy
Expand Down Expand Up @@ -433,7 +433,7 @@ Slices 1+2 already beat the status quo; 3 adds the fix automation; 4 makes it di

### §10 addenda (slice 4: the `/agentify` deploy flow)

Built on `main`. `plugins/e2a/agentify/agentify-render.sh` is the deterministic
Built on `main`. `plugins/e2a/skills/agentify/agentify-render.sh` is the deterministic
scaffolder; `SKILL.md` is the interactive wrapper.

- **Render** fills `autonomous-repo.config.yml` from `ANS_*` answers (failing
Expand Down Expand Up @@ -490,7 +490,7 @@ is purely additive (zero loop changes).

### §10 addenda (test harness)

`plugins/e2a/agentify/test/run.sh` is the deterministic suite (CI:
`plugins/e2a/skills/agentify/test/run.sh` is the deterministic suite (CI:
`.github/workflows/agentify-test.yml`): every script `_selftest` + the addon's
`bridge.test.mjs` + bash/JS syntax + `test/validate.py` (YAML parse, the
rendered config vs what the workflows read, **e2a MCP/REST URL host
Expand Down Expand Up @@ -524,21 +524,20 @@ installable, not just copy-able:
second skill alongside the existing `skills/e2a/`); the plugin's marketplace
entry is unchanged, version bumped `0.3.2 → 0.4.0` across all manifests
(`scripts/validate-plugin.mjs` enforces the sync + the frontmatter rules).
- The scaffolder + templates stay at `plugins/e2a/agentify/` (so CI and the
test suite are unchanged); the skill references them via
**`${CLAUDE_PLUGIN_ROOT}/agentify/`** — the whole plugin ships to the install
cache, so the bundled `agentify-render.sh` / `templates/` / `references/`
resolve at runtime.
- The scaffolder + templates live in the skill's own directory,
`plugins/e2a/skills/agentify/` alongside `SKILL.md` (the conventional
skill-local layout); the skill references them via
**`${CLAUDE_PLUGIN_ROOT}/skills/agentify/`** — the whole plugin ships to the
install cache, so the bundled `agentify-render.sh` / `templates/` /
`references/` resolve at runtime. (The CI workflows follow the same path.)
- Install: `/plugin marketplace add Mnexa-AI/e2a` → `/plugin install e2a` →
`/agentify` is available (plus the e2a MCP tools). The §4.5 "home:
`plugins/e2a/agentify/`" note refers to the tooling dir; the user-facing
skill is the plugin skill above.
`/agentify` is available (plus the e2a MCP tools).

## 10. Implementation reconciliation (`feat/agentify-feedback-loop`)

Deviations recorded at build time (slice 1 — intake + triage):

- **Home / shape**: the framework lives at `plugins/e2a/agentify/` — a deploy
- **Home / shape**: the framework lives at `plugins/e2a/skills/agentify/` — a deploy
skill (`SKILL.md` + `references/`) whose `templates/` *are* the framework
(`autonomous-repo.config.yml.tmpl`, `runtime-skill/**`,
`workflows/feedback-triage.yml.tmpl`, `scripts/ticket_card.sh`).
Expand Down
10 changes: 5 additions & 5 deletions plugins/e2a/skills/agentify/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ framework. The install lands as a **PR the repo owner reviews and merges** —
the install itself goes through the same human gate the framework runs on.

> **Where the tooling lives.** The scaffolder and templates ship in this
> plugin at `${CLAUDE_PLUGIN_ROOT}/agentify/` — `agentify-render.sh`,
> plugin at `${CLAUDE_PLUGIN_ROOT}/skills/agentify/` — `agentify-render.sh`,
> `templates/`, `references/`. Reference them with that variable (it resolves
> to the plugin's install path); run commands from there.

Expand All @@ -27,7 +27,7 @@ the install itself goes through the same human gate the framework runs on.

## What gets scaffolded into the target repo

| from `${CLAUDE_PLUGIN_ROOT}/agentify/templates/` | to the target repo |
| from `${CLAUDE_PLUGIN_ROOT}/skills/agentify/templates/` | to the target repo |
|---|---|
| `autonomous-repo.config.yml.tmpl` | `autonomous-repo.config.yml` (the only file the adopter owns) |
| `runtime-skill/**` | `.claude/skills/autonomous-repo/**` |
Expand All @@ -46,7 +46,7 @@ the install itself goes through the same human gate the framework runs on.
recommended), `ANS_APPROVER_ADDRESS`, `ANS_VERIFY_SETUP_SCRIPT`. (The bot
login can be filled later from the checklist; secrets are never gathered
here.)
3. **Render.** Run `"${CLAUDE_PLUGIN_ROOT}/agentify/agentify-render.sh" --to <target-repo-root>`. It fills
3. **Render.** Run `"${CLAUDE_PLUGIN_ROOT}/skills/agentify/agentify-render.sh" --to <target-repo-root>`. It fills
`autonomous-repo.config.yml` from the `ANS_*` answers (failing loudly on
any unfilled placeholder) and scaffolds the runtime skill, the scripts,
and the four workflows into their real paths
Expand All @@ -57,7 +57,7 @@ the install itself goes through the same human gate the framework runs on.
the config. Then **tune** the rendered config's `always_hitl` list for the
product's sensitive surfaces, and sanity-check: `scripts/*.sh _selftest`
all green and the config parses. **Optional addons**
(`${CLAUDE_PLUGIN_ROOT}/agentify/templates/addons/`)
(`${CLAUDE_PLUGIN_ROOT}/skills/agentify/templates/addons/`)
— e.g. `submit-feedback-mcp` (a `submit_feedback` MCP tool that
email-bridges into the support mailbox) — are opted in via
`ANS_ADDONS="<name> ..."`; the render scaffolds each to `tools/<name>/` and
Expand Down Expand Up @@ -86,7 +86,7 @@ variable to pause everything. Run the loop interactively any time with the

## References

(all under `${CLAUDE_PLUGIN_ROOT}/agentify/references/`)
(all under `${CLAUDE_PLUGIN_ROOT}/skills/agentify/references/`)

- `setup-checklist.md` — the one-time identity/secret setup.
- `adapters.md` — the TicketStore / CommsChannel / Intake adapter contracts
Expand Down
Loading