diff --git a/.agency/plugins/ff-oce/.claude-plugin/plugin.json b/.agency/plugins/ff-oce/.claude-plugin/plugin.json
new file mode 100644
index 000000000000..07dcc1b8f8e0
--- /dev/null
+++ b/.agency/plugins/ff-oce/.claude-plugin/plugin.json
@@ -0,0 +1,5 @@
+{
+ "name": "ff-oce",
+ "description": "Fluid Framework On-Call Engineer agent and tools",
+ "version": "1.0.0"
+}
diff --git a/.repoverlay/library/ff-oce/.claude/agents/ff-oce.md b/.agency/plugins/ff-oce/agents/ff-oce.md
similarity index 96%
rename from .repoverlay/library/ff-oce/.claude/agents/ff-oce.md
rename to .agency/plugins/ff-oce/agents/ff-oce.md
index aa343041592d..48c9daaa6a86 100644
--- a/.repoverlay/library/ff-oce/.claude/agents/ff-oce.md
+++ b/.agency/plugins/ff-oce/agents/ff-oce.md
@@ -1,42 +1,6 @@
---
name: ff-oce
description: 'Assists engineers on the Fluid Framework Client OCE rotation.'
-mcp-servers:
- ado:
- type: local
- command: agency
- args: ["mcp", "ado", "--organization", "fluidframework"]
- tools: ["*"]
- ado-office:
- type: local
- command: agency
- args: ["mcp", "ado", "--organization", "office"]
- tools: ["*"]
- enghub:
- type: local
- command: agency
- args: ["mcp", "enghub"]
- tools: ["*"]
- icm:
- type: local
- command: agency
- args: ["mcp", "icm"]
- tools: ["*"]
- kusto:
- type: local
- command: agency
- args: ["mcp", "kusto", "--service-uri", "https://kusto.aria.microsoft.com/"]
- tools: ["*"]
- teams:
- type: local
- command: agency
- args: ["mcp", "teams"]
- tools: ["*"]
- workiq:
- type: local
- command: agency
- args: ["mcp", "workiq"]
- tools: ["*"]
---
# Fluid Framework On-Call Engineer (OCE) Agent
diff --git a/.repoverlay/library/ff-oce/.claude/skills/ff-oce-dashboard/SKILL.md b/.agency/plugins/ff-oce/skills/ff-oce-dashboard/SKILL.md
similarity index 100%
rename from .repoverlay/library/ff-oce/.claude/skills/ff-oce-dashboard/SKILL.md
rename to .agency/plugins/ff-oce/skills/ff-oce-dashboard/SKILL.md
diff --git a/.repoverlay/library/ff-oce/.claude/skills/ff-oce-kusto/SKILL.md b/.agency/plugins/ff-oce/skills/ff-oce-kusto/SKILL.md
similarity index 100%
rename from .repoverlay/library/ff-oce/.claude/skills/ff-oce-kusto/SKILL.md
rename to .agency/plugins/ff-oce/skills/ff-oce-kusto/SKILL.md
diff --git a/.repoverlay/library/ff-oce/.claude/skills/ff-oce-kusto/references/kusto-query-reference.md b/.agency/plugins/ff-oce/skills/ff-oce-kusto/references/kusto-query-reference.md
similarity index 100%
rename from .repoverlay/library/ff-oce/.claude/skills/ff-oce-kusto/references/kusto-query-reference.md
rename to .agency/plugins/ff-oce/skills/ff-oce-kusto/references/kusto-query-reference.md
diff --git a/.agency/plugins/nori/.claude-plugin/plugin.json b/.agency/plugins/nori/.claude-plugin/plugin.json
new file mode 100644
index 000000000000..f9ae58b99d26
--- /dev/null
+++ b/.agency/plugins/nori/.claude-plugin/plugin.json
@@ -0,0 +1,5 @@
+{
+ "name": "nori",
+ "description": "Senior SWE profile — skills, subagents, and commands",
+ "version": "1.0.2"
+}
diff --git a/.repoverlay/library/nori/subagents/nori-change-documenter.md b/.agency/plugins/nori/agents/nori-change-documenter.md
similarity index 100%
rename from .repoverlay/library/nori/subagents/nori-change-documenter.md
rename to .agency/plugins/nori/agents/nori-change-documenter.md
diff --git a/.repoverlay/library/nori/subagents/nori-code-reviewer.md b/.agency/plugins/nori/agents/nori-code-reviewer.md
similarity index 100%
rename from .repoverlay/library/nori/subagents/nori-code-reviewer.md
rename to .agency/plugins/nori/agents/nori-code-reviewer.md
diff --git a/.repoverlay/library/nori/subagents/nori-codebase-analyzer.md b/.agency/plugins/nori/agents/nori-codebase-analyzer.md
similarity index 100%
rename from .repoverlay/library/nori/subagents/nori-codebase-analyzer.md
rename to .agency/plugins/nori/agents/nori-codebase-analyzer.md
diff --git a/.repoverlay/library/nori/subagents/nori-codebase-locator.md b/.agency/plugins/nori/agents/nori-codebase-locator.md
similarity index 100%
rename from .repoverlay/library/nori/subagents/nori-codebase-locator.md
rename to .agency/plugins/nori/agents/nori-codebase-locator.md
diff --git a/.repoverlay/library/nori/subagents/nori-codebase-pattern-finder.md b/.agency/plugins/nori/agents/nori-codebase-pattern-finder.md
similarity index 100%
rename from .repoverlay/library/nori/subagents/nori-codebase-pattern-finder.md
rename to .agency/plugins/nori/agents/nori-codebase-pattern-finder.md
diff --git a/.repoverlay/library/nori/subagents/nori-initial-documenter.md b/.agency/plugins/nori/agents/nori-initial-documenter.md
similarity index 100%
rename from .repoverlay/library/nori/subagents/nori-initial-documenter.md
rename to .agency/plugins/nori/agents/nori-initial-documenter.md
diff --git a/.repoverlay/library/nori/subagents/nori-web-search-researcher.md b/.agency/plugins/nori/agents/nori-web-search-researcher.md
similarity index 100%
rename from .repoverlay/library/nori/subagents/nori-web-search-researcher.md
rename to .agency/plugins/nori/agents/nori-web-search-researcher.md
diff --git a/.repoverlay/library/nori/subagents/paid-nori-knowledge-researcher.md b/.agency/plugins/nori/agents/paid-nori-knowledge-researcher.md
similarity index 100%
rename from .repoverlay/library/nori/subagents/paid-nori-knowledge-researcher.md
rename to .agency/plugins/nori/agents/paid-nori-knowledge-researcher.md
diff --git a/.repoverlay/library/nori/slashcommands/nori-init-docs.md b/.agency/plugins/nori/commands/nori-init-docs.md
similarity index 100%
rename from .repoverlay/library/nori/slashcommands/nori-init-docs.md
rename to .agency/plugins/nori/commands/nori-init-docs.md
diff --git a/.repoverlay/library/nori/.claude/skills/brainstorming/.nori-version b/.agency/plugins/nori/skills/brainstorming/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/brainstorming/.nori-version
rename to .agency/plugins/nori/skills/brainstorming/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/brainstorming/SKILL.md b/.agency/plugins/nori/skills/brainstorming/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/brainstorming/SKILL.md
rename to .agency/plugins/nori/skills/brainstorming/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/brainstorming/nori.json b/.agency/plugins/nori/skills/brainstorming/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/brainstorming/nori.json
rename to .agency/plugins/nori/skills/brainstorming/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/building-ui-ux/.nori-version b/.agency/plugins/nori/skills/building-ui-ux/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/building-ui-ux/.nori-version
rename to .agency/plugins/nori/skills/building-ui-ux/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/building-ui-ux/SKILL.md b/.agency/plugins/nori/skills/building-ui-ux/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/building-ui-ux/SKILL.md
rename to .agency/plugins/nori/skills/building-ui-ux/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/building-ui-ux/nori.json b/.agency/plugins/nori/skills/building-ui-ux/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/building-ui-ux/nori.json
rename to .agency/plugins/nori/skills/building-ui-ux/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/creating-debug-tests-and-iterating/.nori-version b/.agency/plugins/nori/skills/creating-debug-tests-and-iterating/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/creating-debug-tests-and-iterating/.nori-version
rename to .agency/plugins/nori/skills/creating-debug-tests-and-iterating/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/creating-debug-tests-and-iterating/SKILL.md b/.agency/plugins/nori/skills/creating-debug-tests-and-iterating/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/creating-debug-tests-and-iterating/SKILL.md
rename to .agency/plugins/nori/skills/creating-debug-tests-and-iterating/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/creating-debug-tests-and-iterating/nori.json b/.agency/plugins/nori/skills/creating-debug-tests-and-iterating/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/creating-debug-tests-and-iterating/nori.json
rename to .agency/plugins/nori/skills/creating-debug-tests-and-iterating/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/creating-skills/.nori-version b/.agency/plugins/nori/skills/creating-skills/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/creating-skills/.nori-version
rename to .agency/plugins/nori/skills/creating-skills/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/creating-skills/SKILL.md b/.agency/plugins/nori/skills/creating-skills/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/creating-skills/SKILL.md
rename to .agency/plugins/nori/skills/creating-skills/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/creating-skills/nori.json b/.agency/plugins/nori/skills/creating-skills/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/creating-skills/nori.json
rename to .agency/plugins/nori/skills/creating-skills/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/finishing-a-development-branch/.nori-version b/.agency/plugins/nori/skills/finishing-a-development-branch/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/finishing-a-development-branch/.nori-version
rename to .agency/plugins/nori/skills/finishing-a-development-branch/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/finishing-a-development-branch/SKILL.md b/.agency/plugins/nori/skills/finishing-a-development-branch/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/finishing-a-development-branch/SKILL.md
rename to .agency/plugins/nori/skills/finishing-a-development-branch/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/finishing-a-development-branch/nori.json b/.agency/plugins/nori/skills/finishing-a-development-branch/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/finishing-a-development-branch/nori.json
rename to .agency/plugins/nori/skills/finishing-a-development-branch/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/handle-large-tasks/.nori-version b/.agency/plugins/nori/skills/handle-large-tasks/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/handle-large-tasks/.nori-version
rename to .agency/plugins/nori/skills/handle-large-tasks/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/handle-large-tasks/SKILL.md b/.agency/plugins/nori/skills/handle-large-tasks/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/handle-large-tasks/SKILL.md
rename to .agency/plugins/nori/skills/handle-large-tasks/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/handle-large-tasks/nori.json b/.agency/plugins/nori/skills/handle-large-tasks/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/handle-large-tasks/nori.json
rename to .agency/plugins/nori/skills/handle-large-tasks/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/receiving-code-review/.nori-version b/.agency/plugins/nori/skills/receiving-code-review/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/receiving-code-review/.nori-version
rename to .agency/plugins/nori/skills/receiving-code-review/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/receiving-code-review/SKILL.md b/.agency/plugins/nori/skills/receiving-code-review/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/receiving-code-review/SKILL.md
rename to .agency/plugins/nori/skills/receiving-code-review/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/receiving-code-review/nori.json b/.agency/plugins/nori/skills/receiving-code-review/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/receiving-code-review/nori.json
rename to .agency/plugins/nori/skills/receiving-code-review/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/root-cause-tracing/.nori-version b/.agency/plugins/nori/skills/root-cause-tracing/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/root-cause-tracing/.nori-version
rename to .agency/plugins/nori/skills/root-cause-tracing/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/root-cause-tracing/SKILL.md b/.agency/plugins/nori/skills/root-cause-tracing/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/root-cause-tracing/SKILL.md
rename to .agency/plugins/nori/skills/root-cause-tracing/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/root-cause-tracing/nori.json b/.agency/plugins/nori/skills/root-cause-tracing/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/root-cause-tracing/nori.json
rename to .agency/plugins/nori/skills/root-cause-tracing/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/systematic-debugging/.SKILL.md.swp b/.agency/plugins/nori/skills/systematic-debugging/.SKILL.md.swp
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/systematic-debugging/.SKILL.md.swp
rename to .agency/plugins/nori/skills/systematic-debugging/.SKILL.md.swp
diff --git a/.repoverlay/library/nori/.claude/skills/systematic-debugging/.nori-version b/.agency/plugins/nori/skills/systematic-debugging/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/systematic-debugging/.nori-version
rename to .agency/plugins/nori/skills/systematic-debugging/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/systematic-debugging/SKILL.md b/.agency/plugins/nori/skills/systematic-debugging/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/systematic-debugging/SKILL.md
rename to .agency/plugins/nori/skills/systematic-debugging/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/systematic-debugging/nori.json b/.agency/plugins/nori/skills/systematic-debugging/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/systematic-debugging/nori.json
rename to .agency/plugins/nori/skills/systematic-debugging/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/test-driven-development/.nori-version b/.agency/plugins/nori/skills/test-driven-development/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/test-driven-development/.nori-version
rename to .agency/plugins/nori/skills/test-driven-development/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/test-driven-development/SKILL.md b/.agency/plugins/nori/skills/test-driven-development/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/test-driven-development/SKILL.md
rename to .agency/plugins/nori/skills/test-driven-development/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/test-driven-development/nori.json b/.agency/plugins/nori/skills/test-driven-development/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/test-driven-development/nori.json
rename to .agency/plugins/nori/skills/test-driven-development/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/testing-anti-patterns/.nori-version b/.agency/plugins/nori/skills/testing-anti-patterns/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/testing-anti-patterns/.nori-version
rename to .agency/plugins/nori/skills/testing-anti-patterns/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/testing-anti-patterns/SKILL.md b/.agency/plugins/nori/skills/testing-anti-patterns/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/testing-anti-patterns/SKILL.md
rename to .agency/plugins/nori/skills/testing-anti-patterns/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/testing-anti-patterns/nori.json b/.agency/plugins/nori/skills/testing-anti-patterns/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/testing-anti-patterns/nori.json
rename to .agency/plugins/nori/skills/testing-anti-patterns/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/updating-noridocs/.nori-version b/.agency/plugins/nori/skills/updating-noridocs/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/updating-noridocs/.nori-version
rename to .agency/plugins/nori/skills/updating-noridocs/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/updating-noridocs/SKILL.md b/.agency/plugins/nori/skills/updating-noridocs/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/updating-noridocs/SKILL.md
rename to .agency/plugins/nori/skills/updating-noridocs/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/updating-noridocs/nori.json b/.agency/plugins/nori/skills/updating-noridocs/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/updating-noridocs/nori.json
rename to .agency/plugins/nori/skills/updating-noridocs/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/using-git-worktrees/.nori-version b/.agency/plugins/nori/skills/using-git-worktrees/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/using-git-worktrees/.nori-version
rename to .agency/plugins/nori/skills/using-git-worktrees/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/using-git-worktrees/SKILL.md b/.agency/plugins/nori/skills/using-git-worktrees/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/using-git-worktrees/SKILL.md
rename to .agency/plugins/nori/skills/using-git-worktrees/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/using-git-worktrees/nori.json b/.agency/plugins/nori/skills/using-git-worktrees/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/using-git-worktrees/nori.json
rename to .agency/plugins/nori/skills/using-git-worktrees/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/using-screenshots/.nori-version b/.agency/plugins/nori/skills/using-screenshots/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/using-screenshots/.nori-version
rename to .agency/plugins/nori/skills/using-screenshots/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/using-screenshots/CREATION-LOG.md b/.agency/plugins/nori/skills/using-screenshots/CREATION-LOG.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/using-screenshots/CREATION-LOG.md
rename to .agency/plugins/nori/skills/using-screenshots/CREATION-LOG.md
diff --git a/.repoverlay/library/nori/.claude/skills/using-screenshots/SKILL.md b/.agency/plugins/nori/skills/using-screenshots/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/using-screenshots/SKILL.md
rename to .agency/plugins/nori/skills/using-screenshots/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/using-screenshots/nori.json b/.agency/plugins/nori/skills/using-screenshots/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/using-screenshots/nori.json
rename to .agency/plugins/nori/skills/using-screenshots/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/using-skills/.nori-version b/.agency/plugins/nori/skills/using-skills/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/using-skills/.nori-version
rename to .agency/plugins/nori/skills/using-skills/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/using-skills/SKILL.md b/.agency/plugins/nori/skills/using-skills/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/using-skills/SKILL.md
rename to .agency/plugins/nori/skills/using-skills/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/using-skills/nori.json b/.agency/plugins/nori/skills/using-skills/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/using-skills/nori.json
rename to .agency/plugins/nori/skills/using-skills/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/webapp-testing/.nori-version b/.agency/plugins/nori/skills/webapp-testing/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/webapp-testing/.nori-version
rename to .agency/plugins/nori/skills/webapp-testing/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/webapp-testing/SKILL.md b/.agency/plugins/nori/skills/webapp-testing/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/webapp-testing/SKILL.md
rename to .agency/plugins/nori/skills/webapp-testing/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/webapp-testing/nori.json b/.agency/plugins/nori/skills/webapp-testing/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/webapp-testing/nori.json
rename to .agency/plugins/nori/skills/webapp-testing/nori.json
diff --git a/.repoverlay/library/nori/.claude/skills/writing-plans/.nori-version b/.agency/plugins/nori/skills/writing-plans/.nori-version
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/writing-plans/.nori-version
rename to .agency/plugins/nori/skills/writing-plans/.nori-version
diff --git a/.repoverlay/library/nori/.claude/skills/writing-plans/SKILL.md b/.agency/plugins/nori/skills/writing-plans/SKILL.md
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/writing-plans/SKILL.md
rename to .agency/plugins/nori/skills/writing-plans/SKILL.md
diff --git a/.repoverlay/library/nori/.claude/skills/writing-plans/nori.json b/.agency/plugins/nori/skills/writing-plans/nori.json
similarity index 100%
rename from .repoverlay/library/nori/.claude/skills/writing-plans/nori.json
rename to .agency/plugins/nori/skills/writing-plans/nori.json
diff --git a/.repoverlay/library/ff-oce/repoverlay.ccl b/.repoverlay/library/ff-oce/repoverlay.ccl
deleted file mode 100644
index 4cf41519f979..000000000000
--- a/.repoverlay/library/ff-oce/repoverlay.ccl
+++ /dev/null
@@ -1,13 +0,0 @@
-/= Overlay configuration file.
-/= This file describes an overlay and how it should be applied.
-
-overlay =
- /= name: Display name for this overlay.
- /= Used in status output and when listing overlays.
- name = ff-oce
-
-/= mappings (optional): Remap file paths when applying the overlay.
-/= Keys are source paths (in the overlay), values are target paths (in the repo).
-/= Use this to rename files or place them in different locations.
-/= mappings =
-/= .envrc.template = .envrc
diff --git a/.repoverlay/library/nori/.nori-version b/.repoverlay/library/nori/.nori-version
deleted file mode 100644
index 34e089c6aea8..000000000000
--- a/.repoverlay/library/nori/.nori-version
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "version": "1.0.2",
- "registryUrl": "https://noriskillsets.dev"
-}
\ No newline at end of file
diff --git a/.repoverlay/library/nori/CLAUDE.md b/.repoverlay/library/nori/CLAUDE.md
index 2084da3fe08d..58465bf6d8ac 100644
--- a/.repoverlay/library/nori/CLAUDE.md
+++ b/.repoverlay/library/nori/CLAUDE.md
@@ -2,10 +2,10 @@
- *CRITICAL* Add each element of this checklist to your Todo list using TodoWrite. DO NOT BE LAZY.
- Announce "Following Nori workflow..." to the user
Do not skip any steps. Do not rationalize. Do not avoid reading skills. Even if you think you know what is in them, you MUST read the skill files.
-- Read `.claude/skills/using-skills/SKILL.md`
+- Invoke the `using-skills` skill
- Check git status - are you on main, master, dev, or any similarly named protected branch?
- If yes: ask me if I want to create a branch or a worktree.
- - If creating a worktree, read and follow `.claude/skills/using-git-worktrees/SKILL.md` to automatically create a worktree. Derive the branch name from my request.
+ - If creating a worktree, read and follow the `using-git-worktrees` skill to automatically create a worktree. Derive the branch name from my request.
- Ask me to pick a mode: nori-full-send or nori-copilot.
In nori-full-send mode, the agent works with me to create a plan, and then operates autonomously until work is completed.
In nori-copilot mode, the agent works with me to create a plan, and then clearly telegraphs each step and asks for permission before continuing.
@@ -17,19 +17,19 @@
- *CRITICAL* Add each element of this checklist to your Todo list using TodoWrite. DO NOT BE LAZY.
- Research how to best solve my question WITHOUT making code changes by doing the following:
- - Search for relevant skills using Glob/Grep in `.claude/skills/`
+ - Search for relevant skills in the available skills list
- Use subagents to do your deep research. If you have access to the nori-knowledge-researcher subagent, use that one.
You can run many research subagents in parallel.
-- Read and follow `.claude/skills/writing-plans/SKILL.md`
+- Read and follow the `writing-plans` skill
- Present plan to me and ask for feedback.
- If I have feedback, modify the plan. Repeat until I approve.
Do not stop here. Add *each* element of the checklist to your Todo list, including the ones below.
-- Use test driven development. Read and follow `.claude/skills/test-driven-development/SKILL.md`.
+- Use test driven development. Read and follow the `test-driven-development` skill.
Remember to write tests for all features first before writing any implementation
- Move immediately to the next step in your TodoList. Do *NOT* just present your work and wait around.
- Check if the codebase uses noridocs.
-- Update documentation, INCLUDING out of date documentation. Read and follow `.claude/skills/updating-noridocs/SKILL.md`
-- Finish development with final checks. Read and follow `.claude/skills/finishing-a-development-branch/SKILL.md`
+- Update documentation, INCLUDING out of date documentation. Read and follow the `updating-noridocs` skill
+- Finish development with final checks. Read and follow the `finishing-a-development-branch` skill
@@ -45,17 +45,17 @@ Do not make changes to third party APIs.
- *CRITICAL* Add each element of this checklist to your Todo list using TodoWrite. DO NOT BE LAZY.
Copilot mode should behave identically to full-send mode, just on your
- Research how to best solve my question WITHOUT making code changes by doing the following:
- - Search for relevant skills using Glob/Grep in `.claude/skills/`
+ - Search for relevant skills in the available skills list
- Use subagents to do your deep research. If you have access to the nori-knowledge-researcher subagent, use that one.
You can run many research subagents in parallel.
-- Read and follow `.claude/skills/writing-plans/SKILL.md`
+- Read and follow the `writing-plans` skill
- Present plan to me and ask for feedback.
- If I have feedback, modify the plan. Repeat until I approve.
Do not stop here. Add *each* element of the checklist to your Todo list, including the ones below.
-- Ask if I want to follow test driven development. If yes, read and follow `.claude/skills/test-driven-development/SKILL.md`
+- Ask if I want to follow test driven development. If yes, read and follow the `test-driven-development` skill
Remember to write tests for all features first before writing any implementation
-- Ask if I want to update docs, including out of date documentation. If yes, read and follow `.claude/skills/updating-noridocs/SKILL.md`
-- Ask if I want to create a PR. If yes, read and follow `.claude/skills/finishing-a-development-branch/SKILL.md`
+- Ask if I want to update docs, including out of date documentation. If yes, read and follow the `updating-noridocs` skill
+- Ask if I want to create a PR. If yes, read and follow the `finishing-a-development-branch` skill
@@ -84,6 +84,6 @@ If you cannot find the source of the bug, STOP. Compile everything you have lear
**See also:**
-- `.claude/skills/testing-anti-patterns/SKILL.md` - What NOT to do when writing tests
-- `.claude/skills/systematic-debugging/SKILL.md` - Four-phase debugging framework
-- `.claude/skills/root-cause-tracing/SKILL.md` - Backward tracing technique
+- `testing-anti-patterns` skill - What NOT to do when writing tests
+- `systematic-debugging` skill - Four-phase debugging framework
+- `root-cause-tracing` skill - Backward tracing technique
diff --git a/.repoverlay/library/nori/docs.md b/.repoverlay/library/nori/docs.md
deleted file mode 100644
index 4e61fd7d7bd9..000000000000
--- a/.repoverlay/library/nori/docs.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# Noridoc: senior-swe
-
-Path: @/src/cli/features/claude-code/profiles/config/senior-swe
-
-### Overview
-
-Self-contained profile for general-purpose software engineering. Contains all skills, subagents, and slash commands directly inlined. Features dual-mode operation: "copilot" mode for interactive pair programming with frequent checkpoints, and "full-send" mode for highly autonomous operation with fewer checkpoints. This is the default profile for Nori.
-
-### How it fits into the larger codebase
-
-This is one of the built-in profiles shipped with Nori at @/src/cli/features/claude-code/profiles/config/. During installation, the profiles loader (@/src/cli/features/claude-code/profiles/loader.ts) copies this entire directory to `~/.nori/profiles/senior-swe/`. Feature sub-loaders then read from this location:
-- Skills are copied to `~/.claude/skills/` by @/src/cli/features/claude-code/profiles/skills/loader.ts
-- Subagents are copied to `~/.claude/agents/` by @/src/cli/features/claude-code/profiles/subagents/loader.ts
-- Slash commands are copied to `~/.claude/commands/` by @/src/cli/features/claude-code/profiles/slashcommands/loader.ts
-- CLAUDE.md is processed and written by @/src/cli/features/claude-code/profiles/claudemd/loader.ts
-
-### Core Implementation
-
-**Profile Content**: This profile directory contains:
-- `CLAUDE.md` - Dual-mode workflow instructions (copilot vs full-send)
-- `profile.json` - Metadata with name, description, and `"builtin": true`
-- `skills/` - All SWE skills inlined (TDD, debugging, git-worktrees, brainstorming, writing-plans, etc.)
-- `subagents/` - All subagents inlined (documentation, codebase analysis, web research)
-- `slashcommands/` - Profile-specific slash commands
-
-**Dual-mode operation**:
-- **Copilot mode**: Interactive pair programming with frequent checkpoints. Asks for approval at each major step.
-- **Full-send mode**: Highly autonomous operation. Creates plan, gets approval, then executes independently until completion.
-
-**Paid content**: Skills and subagents with `paid-` prefix (e.g., `paid-recall/`, `paid-memorize/`) are tier-gated.
-
-### Things to Know
-
-**Self-contained architecture**: All profile content is inlined directly in this directory. There is no mixin composition or inheritance - this profile is complete as-is.
-
-**Default profile**: This is the default profile used when no profile is explicitly configured.
-
-**Profile preservation**: Once copied to `~/.nori/profiles/senior-swe/`, this profile is never overwritten during subsequent installs.
-
-Created and maintained by Nori.
diff --git a/.repoverlay/library/nori/nori.json b/.repoverlay/library/nori/nori.json
deleted file mode 100644
index 92299985d78c..000000000000
--- a/.repoverlay/library/nori/nori.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
- "name": "senior-swe",
- "version": "1.0.2",
- "description": "General purpose profile ideal for software engineering",
- "dependencies": {
- "skills": {
- "brainstorming": "1.0.0",
- "building-ui-ux": "1.0.0",
- "creating-debug-tests-and-iterating": "1.0.0",
- "creating-skills": "1.0.0",
- "finishing-a-development-branch": "1.0.0",
- "handle-large-tasks": "1.0.0",
- "receiving-code-review": "1.0.0",
- "root-cause-tracing": "1.0.0",
- "systematic-debugging": "1.0.0",
- "testing-anti-patterns": "1.0.0",
- "test-driven-development": "1.0.0",
- "updating-noridocs": "1.0.0",
- "using-git-worktrees": "1.0.0",
- "using-skills": "1.0.0",
- "using-screenshots": "1.0.0",
- "webapp-testing": "1.0.0",
- "writing-plans": "1.0.0"
- }
- },
- "subagents": [
- {
- "id": "nori-change-documenter",
- "name": "nori-change-documenter",
- "description": "Creates documentation about changes to a codebase. Call the nori-change-documenter whenever you change the codebase. Provide all of the relevance context for *why* the change was made. Be extremely detailed! Provide as much context as possible so the agent can accurately update documentation."
- },
- {
- "id": "nori-code-reviewer",
- "name": "nori-code-reviewer",
- "description": "Use after making code changes but before submitting a PR as a final check. Explain what the purpose of the change is when using this agent."
- },
- {
- "id": "nori-codebase-analyzer",
- "name": "nori-codebase-analyzer",
- "description": "Analyzes codebase implementation details. Call the nori-codebase-analyzer agent when you need to find detailed information about specific components. As always, the more detailed your request prompt, the better! :)"
- },
- {
- "id": "nori-codebase-locator",
- "name": "nori-codebase-locator",
- "description": "Locates files, directories, and components relevant to a feature or task. Call `nori-codebase-locator` with human language prompt describing what you're looking for. Basically a \"Super Grep/Glob/LS tool\" — Use it if you find yourself desiring to use one of these tools more than once."
- },
- {
- "id": "nori-codebase-pattern-finder",
- "name": "nori-codebase-pattern-finder",
- "description": "nori-codebase-pattern-finder is a useful subagent_type for finding similar implementations, usage examples, or existing patterns that can be modeled after. It will give you concrete code examples based on what you're looking for! It's sorta like nori-codebase-locator, but it will not only tell you the location of files, it will also give you code details!"
- },
- {
- "id": "nori-initial-documenter",
- "name": "nori-initial-documenter",
- "description": "Creates documentation about a codebase. This agent creates the initial documentation for the codebase; use this agent when you want to create documentation and no existing documentation is present."
- },
- {
- "id": "nori-web-search-researcher",
- "name": "nori-web-search-researcher",
- "description": "Do you find yourself desiring information that you don't quite feel well-trained (confident) on? Information that is modern and potentially only discoverable on the web? Use the nori-web-search-researcher subagent_type today to find any and all answers to your questions! It will research deeply to figure out and attempt to answer your questions! If you aren't immediately satisfied you can get your money back! (Not really - but you can re-run nori-web-search-researcher with an altered prompt in the event you're not satisfied the first time)"
- },
- {
- "id": "paid-nori-knowledge-researcher",
- "name": "nori-knowledge-researcher",
- "description": "Research specialist for querying the Nori knowledge base to find relevant context and information. Executes focused, iterative research with clear stopping criteria."
- }
- ],
- "slashcommands": [
- {
- "command": "nori-init-docs",
- "description": "Initialize docs.md files throughout the codebase"
- }
- ]
-}
diff --git a/.repoverlay/library/nori/profile.json b/.repoverlay/library/nori/profile.json
deleted file mode 100644
index 161fa862da9a..000000000000
--- a/.repoverlay/library/nori/profile.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "name": "senior-swe",
- "description": "General purpose profile ideal for software engineering. Comes with two modes: copilot mode (ideal for working side by side in pair programming mode, with frequent checkpoints) and full-send mode (highly autonomous mode with fewer checkpoints).",
- "builtin": true
-}
diff --git a/.repoverlay/library/nori/subagents/docs.md b/.repoverlay/library/nori/subagents/docs.md
deleted file mode 100644
index 9f4be98a1f7e..000000000000
--- a/.repoverlay/library/nori/subagents/docs.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Noridoc: subagents (senior-swe)
-
-Path: @/src/cli/features/claude-code/profiles/config/senior-swe/subagents
-
-### Overview
-
-This directory contains subagent definitions inlined directly in the senior-swe profile. Subagents are specialized AI assistants that can be invoked via the Task tool for focused work like documentation, codebase analysis, and web research. Each subagent is defined in a `.md` file with YAML frontmatter specifying constrained tool access and instructions.
-
-### How it fits into the larger codebase
-
-These subagent .md files are copied to ~/.claude/agents/ during profile installation by @/src/cli/features/claude-code/profiles/subagents/loader.ts. The main agent invokes these subagents using the Task tool with a subagent_type parameter. Files with `paid-` prefix are tier-gated: for paid users the prefix is stripped, for free users they are skipped entirely.
-
-### Core Implementation
-
-Each subagent file uses YAML frontmatter with `tools` (constrained tool list) and `model: inherit`. Documentation subagents (nori-initial-documenter, nori-change-documenter) implement a **two-pass documentation workflow**:
-1. **Top-Down Pass**: Creates initial docs.md files by understanding architecture and working downward
-2. **Bottom-Up Pass**: Verifies accuracy by identifying leaf directories and working upward, correcting any inaccuracies
-
-Codebase analysis subagents (nori-codebase-analyzer, nori-codebase-locator, nori-codebase-pattern-finder) provide focused research capabilities that can run in parallel.
-
-### Things to Know
-
-**Self-contained**: All subagents are inlined directly in this profile directory. No mixin composition or inheritance.
-
-**Documentation subagent constraints**: Documentation subagents have strict constraints - they must NEVER suggest improvements, critique implementation, or evaluate code quality. They are "documentarians not critics".
-
-**Two-pass documentation**: The two-pass approach (top-down then bottom-up) is mandatory for nori-initial-documenter to ensure both architectural context and accurate implementation details.
-
-**Anti-brittle documentation**: Subagents follow anti-brittle guidelines - no exhaustive lists, no numeric counts, no line numbers. Focus on "why" over "what/how".
-
-Created and maintained by Nori.
diff --git a/agency.toml b/agency.toml
new file mode 100644
index 000000000000..4858babb9d53
--- /dev/null
+++ b/agency.toml
@@ -0,0 +1,21 @@
+[profiles.ff-oce.mcps.builtins]
+enghub = true
+icm = true
+teams = true
+workiq = true
+
+[profiles.ff-oce.mcps.builtins.ado]
+organization = "fluidframework"
+
+[profiles.ff-oce.mcps.builtins.ado-office]
+type = "ado"
+organization = "office"
+
+[profiles.ff-oce.mcps.builtins.kusto]
+service_uri = "https://kusto.aria.microsoft.com/"
+
+[profiles.ff-oce.plugins]
+default = ["local:./.agency/plugins/ff-oce"]
+
+[profiles.nori.plugins]
+default = ["local:./.agency/plugins/nori"]
diff --git a/scripts/codespace-setup/agent-aliases.sh b/scripts/codespace-setup/agent-aliases.sh
index 040b8507c64b..9960ef79fe1b 100644
--- a/scripts/codespace-setup/agent-aliases.sh
+++ b/scripts/codespace-setup/agent-aliases.sh
@@ -32,7 +32,7 @@ claude() {
dev() {
_ensure_agency || return 1
repoverlay switch --copy nori
- agency claude --mcp 'ado --org fluidframework' --mcp 'workiq' --mcp 'enghub' "$@" -- --model opus
+ agency claude --profile nori --mcp 'ado --org fluidframework' --mcp 'workiq' --mcp 'enghub' "$@" -- --model opus
}
copilot() {
@@ -43,8 +43,7 @@ copilot() {
oce() {
_ensure_agency || return 1
- repoverlay switch --copy ff-oce
- agency copilot "$@" -- --agent ff-oce
+ agency copilot --profile ff-oce "$@" -- --agent ff-oce:ff-oce
}
ai-reset() {