Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Agent Disclosure

ASecurity

Disclosing a surface's existing fixed AI jobs in the shell's top Agents menu. Use when a page, panel, overlay, or window already runs a mandate behind a button, assist, automatic action, or mode; when the agent-disclosure guard names a file; or during a surface check.

3 stars
0 votes
0 copies
1 views
Added 10/3/2026
ai-agentsgoshellbashfrontenddocumentation

Works with

cli

Security Analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned 10/3/2026

$npx -y skills add armanisadeghi/ai-matrx --skill agent-disclosure --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Agent Disclosure?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Agent Disclosure
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/armanisadeghi-agent-disclosure/badge)](https://www.skillsdirectory.com/skills/armanisadeghi-agent-disclosure)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
SKILL.md
---
name: agent-disclosure
description: "Disclosing a surface's existing fixed AI jobs in the shell's top Agents menu. Use when a page, panel, overlay, or window already runs a mandate behind a button, assist, automatic action, or mode; when the agent-disclosure guard names a file; or during a surface check."
---

# Agent disclosure — register existing fixed jobs in the top menu

## The non-negotiable boundary

🚨 **DISCLOSURE MUST NEVER CHANGE THE SURFACE'S VISIBLE CONTENT.**

Do not add an agent chip, badge, card, row, label, roster, callout, explanatory
copy, icon, toolbar item, or section to the page, panel, dialog, overlay, or
window. Do not move or resize existing content to make room for disclosure. Do
not create a new agent integration merely so a surface can be "complete."

The disclosure destination is the shell's **existing top Agents menu only**.
The job must already exist in the product surface. This skill records that
pre-existing fixed job so the user can inspect its mandate without leaving the
page. It is not authority to modify page content or product behavior.

**One owner-approved exception (Arman, 2026-09-25):** the small Intelligence
icon (`IntelligenceIndicator`, `features/mandates/feature-intelligence/FEATURE.md`)
may sit beside a control that runs a job. It is a door to where the job is
managed, not a disclosure roster — never add anything else under its name.

There is no inline disclosure component. `PageAgents` is forbidden and deleted.
If a task or old document tells you to render it, that instruction is stale and
must not be followed.

Cross-repo source of truth:
`../../../common-docs/systems/mandates/CLIENT-SURFACES.md` § THE
DISCLOSURE LAW. Frontend detail:
[`features/surfaces/FEATURE.md`](../../../features/surfaces/FEATURE.md).

## Decide whether a roster exists

### Fixed surface job — disclose in the top menu

A fixed job is an AI action the surface itself owns: for example, a specific
mandate behind "Assign topics" or a recurring agent that performs the same job
for this page. Confirm the integration already exists before registering it.

- Static job: declare a manifest `agentRole` carrying its `mandateKey`.
- Runtime-selected fixed job: call `useDeclaredSurfaceMandates` from the
  existing action-bearing component. This call has no UI.
- Open the mandate through `useOpenMandateWindow`; never link away to a mandate
  route from a working surface.

### Agent-native and resident agents — explicit isolation

Chat, Agent Builder, runners, tests, and window-panel residents may host an
**outside helper** that works on the page's data. They are not blanket binding
exclusions. The page's native subject agent and any permanent resident helper
must never acquire ad-hoc surface values merely because it is placed on, shown
in, or bound to that surface. Their engineered state and context remain theirs.

Each invocation follows an approved context mode: `none`, `named_inputs`, or
`approved_surface_context`; the latter may use explicit mappings or a
user-approved task-appropriate page snapshot. A documented integration contract
or explicit user choice is approval provenance and persists until its scope
changes; it does not require a new prompt for every run. Placement or a saved
binding does not approve a mode or any value. Record the agent/job,
surface, purpose, mode, allowed value names, approval provenance, and evidence
before treating a helper context handoff as complete. This documentation sets
the required contract and evidence; it claims neither runtime enforcement nor a
unified tracker implementation.

- A native subject launch receives only its explicit engineered inputs. It never
  receives ambient or ad-hoc surface context; helper approval cannot create an
  exception.
- A permanent resident, including a window-panel helper, has no automatic
  inheritance. Its deliberate job contract may use named inputs or approved
  surface context when it works on page data.
- An outside helper may use any page, including Chat or Agent Builder, under its
  recorded integration contract. Binding availability and a data handoff are
  separate decisions; saving a binding does not require or grant context.
- When the approved purpose is agent definition work, the outside helper may
  edit every user-editable definition field, enter runtime variables and human
  input, and run the test. The contract records the actual installed targets;
  it does not pretend an unavailable target or runtime enforcement exists.
- Disclosure still names only an existing fixed job in the top Agents menu. It
  never adds visible agent content or invents an agent.

## Find the work

```bash
pnpm check:agent-disclosure
```

The guard scans UI surfaces that run mandates. It also fails loudly if the
forbidden `PageAgents` import or JSX pattern returns anywhere. Execution
machinery is excluded because it runs on behalf of a surface.

Before changing anything, inventory the surface's existing buttons, assists,
automatic actions, tabs, and modes. For every candidate, prove which fixed
mandate it already runs. Never infer a job from an agent-looking icon or from
the existence of an agent picker.

## Register a static fixed job

In the surface manifest:

```ts
agentRoles: [
  {
    name: "topic_assigner",
    label: "Topic assigner",
    description: "Places this surface's keywords onto the Offering tree.",
    kind: "single",
    defaultAgentId: null,
    mandateKey: "seo.topic_assigner",
    autoRun: "never",
    sortOrder: 100,
  },
],
```

- Use a mandate key, never a raw agent UUID.
- `does`/description says what the job does here in plain product language.
- `mandateKey` and a non-null `defaultAgentId` are mutually exclusive.
- Do not add a role when the surface merely lets the user choose an agent.

## Register a runtime-selected fixed job

Use this only when live state determines which already-existing fixed job the
surface runs:

```tsx
useDeclaredSurfaceMandates(
  engine.agents.map((agent) => ({
    mandateKey: agent.mandateKey,
    does: agent.does,
    surfaceName,
  })),
);
```

`useDeclaredSurfaceMandates` populates the top Agents menu and renders nothing.
Mount it in the existing action-bearing component. Do not add a wrapper or a
visible sibling. Do not use it for arbitrary picker choices.

## Open the mandate in place

```tsx
const openMandate = useOpenMandateWindow();
openMandate({
  initialMandateKey,
  mandateKeys,
  surfaceName,
  initialView: "yours",
});
```

The existing menu row is the door. A link from a working surface to
`/mandates` or `/administration/mandates` is a regression.

## Decision table

| Situation | Verdict |
| --- | --- |
| Any surface, including Chat or Agent Builder, has an existing outside helper | It may bind there; its data delivery follows its recorded approved integration contract. |
| The launch is the page's native subject agent | Give it only its engineered inputs; never an ambient or ad-hoc page snapshot. |
| The launch is a permanent resident helper | Use `none`, named inputs, or approved surface context only under its deliberate documented contract. |
| An existing fixed job runs on a surface | Register it in the top menu only; this is separate from context approval. |
| Runtime mode selects one of several existing fixed jobs | Register the live fixed job without rendering UI. |
| On an eligible ordinary product surface, service/thunk/tool machinery runs a mandate | Register on the calling surface, not in machinery. |
| No AI job exists yet | Do nothing; disclosure cannot invent one. |
| Agent uses a raw UUID with no mandate | Fix hardcoded-agent architecture first; do not invent a key. |

## Verify live

1. Capture the surface before and after. The page body's visible content,
   spacing, controls, and layout are unchanged by disclosure.
2. For a fixed job, open the existing top Agents menu and confirm the job
   appears exactly once. Open it and confirm the mandate window appears over
   the page.
3. For each helper invocation, verify the saved record and a run: allowed names
   arrive for `approved_surface_context`; no ad-hoc surface values reach a native
   or resident agent whose mode is `none`.
4. Confirm no `PageAgents` import, JSX, agent chip, or disclosure-only page
   content exists.
5. Run `pnpm check:agent-disclosure`, focused tests, and `pnpm type-check`.

## Sweep discipline

- One feature area per commit; stage only owned files in the shared checkout.
- Never add visible UI to reduce the guard count.
- Never register an agent the surface does not already run.
- Never add an exemption merely because a finding is inconvenient.
- Update the feature's `FEATURE.md` change log in the same commit.

## Where this runs from

- Standalone: `/agent-disclosure` or an undisclosed-surface sweep.
- Live UI work: `live-ui-iteration` routes here when the surface already has a
  fixed AI job.
- Certification: `surface-check` S5.
- Codex and Claude share this exact skill because `.agents/skills` points to
  `.claude/skills`; `agents/openai.yaml` supplies the Codex interface.

Attribution

armanisadeghiarmanisadeghi
View sourceSee grades on GitHubMore from armanisadeghi →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Caveman

Terse caveman voice: answer first, fluff gone, every technical fact kept. Use for /caveman, "caveman mode", "talk like caveman", "be brief", "less tokens". Stays on until "stop caveman" or "normal mode".

1100021 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

698431 votes

Writing Skills

Create and manage Claude Code skills in HASH repository following Anthropic best practices. Use when creating new skills, modifying skill-rules.json, understanding trigger patterns, working with hooks, debugging skill activation, or implementing progressive disclosure. Covers skill structure, YAML frontmatter, trigger types (keywords, intent patterns), UserPromptSubmit hook, and the 500-line rule. Includes validation and debugging with SKILL_DEBUG. Examples include rust-error-stack, cargo-dep...

3931 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3421 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Amp, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Grok Build, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

741 votes
View all in ai-agents →