{"id":25038,"plugin_id":"Plugin_af5b4b796b588191b3f2c610aa093799","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:19:04.792Z","digest":"8270ce92955e5c65c58e99def270ef681764c11f188d575bbee8ad70beef11a4","against":5543,"payload":{"name":"seller-account-dashboard","description":"Build or update a real seller account dashboard, account home, customer workspace, owned book of business, seller pipeline operating canvas, or clearly labeled placeholder or representative view; also handle explicit account prioritization, rankings, ranked worklists, account focus, and weekly account priorities. Reuse verified CRM or authoritative supplied account data and an existing matching dashboard. Never use for fictional demos or net-new account discovery.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":289},{"relative_path":"assets/account-priority-pane.template.html","size_in_bytes":42796},{"relative_path":"references/suppression-and-fallbacks.md","size_in_bytes":1669},{"relative_path":"references/template-payload.schema.json","size_in_bytes":4595}],"skill_md_contents":"---\nname: seller-account-dashboard\ndescription: \"Build or update a real seller account dashboard, account home, customer workspace, owned book of business, seller pipeline operating canvas, or clearly labeled placeholder or representative view; also handle explicit account prioritization, rankings, ranked worklists, account focus, and weekly account priorities. Reuse verified CRM or authoritative supplied account data and an existing matching dashboard. Never use for fictional demos or net-new account discovery.\"\n---\n\n# Seller Account Dashboard\n\nBuild an ongoing, customizable, real-data operating canvas for one seller, or an explicitly requested, clearly labeled empty placeholder. Account prioritization is one useful requested view, not the identity or scope of the whole dashboard.\n\n## Common Skill Instructions\n\nMANDATORY: If the Sales index has not genuinely been read in this conversation, read [the Sales index](../index/SKILL.md), then reread this focused skill in full before continuing. Before the first clarification, next read [the shared Sales skill instructions](../../shared_skill_instructions.md), [Sales dependencies](../../dependencies.md), and [shared dashboard lifecycle](../../references/dashboard-lifecycle.md), in that order. Follow all five before selecting, rendering, refreshing, or publishing.\n\n## Key Dependency Categories\n\n- [Blocking] ~~CRM only for populated or representative dashboards: account ownership, the account universe, opportunities, contacts, stage, amount, and activity; authoritative user-supplied scoped records can satisfy it. Exception: a clearly labeled empty placeholder never requires CRM.\n- ~~Calendar for verified meetings, decision timing, and in-flight customer motion.\n- ~~Meeting Transcripts for customer history, objections, decisions, and stakeholder context.\n- ~~Email for customer requests, confirmed response status, and promised follow-ups.\n- ~~Internal Messaging for current account changes, active workstreams, owners, and blockers.\n- ~~Knowledge & Files for territory rules, account plans, target lists, and suppression conventions.\n- ~~Sales Intelligence for corroborated fit, contacts, and why-now context after CRM anchors the set.\n\nSites is optional and deferred; never block the first useful local result on site setup or publishing.\n\n## Real Account Canvas\n\n**Choice protocol:** Each `request_user_input` call MUST contain exactly one question (`questions.length === 1`); await its response before the next separate call, including within the same turn. Resolve a verified role mismatch, matching unpublished-local-project choice, dashboard goal, and style separately in that order; never combine them. Ask the existing-dashboard question only after exactly one matching unpublished dashboard is verified or authoritatively identified. If no matching dashboard exists, skip this question and proceed directly to the dashboard goal; never infer an existing project from named accounts or the dashboard request. Each applicable choice MUST have exactly three options, overriding any general two-or-three guidance; exactly one is suffixed `(Recommended)` and appears first. A matching unpublished project's labels are exactly **Use existing (Recommended)**, **Modify existing**, and **Create new**; never inspect an authoritative user-supplied identity/path just to confirm it. The client supplies Other; never add it yourself. If the user explicitly requests one question at a time in chat, ask each in chat instead of using the picker.\n\n**Dashboard goal:** After resolving any confirmed role mismatch and matching unpublished-local-dashboard choice, ask exactly: **What do you want front and center in your dashboard? You can always customize this later.** Offer exactly three substantive seller choices, personalized only from reliable existing memories and quickly available authorized context: **Account priorities and changes (Recommended)**, **Pipeline and forecast risk**, and **Customer meetings and follow-ups**. Keep these stable defaults when context is thin; safe relevant preferences may refine the focused wording and recommended direction, never reduce the three choices or exclude any other grounded dashboard capability.\n\n**Design style:** After the goal, ask exactly **What look and feel would you like for your dashboard?** Offer exactly three distinct visual choices: **Codex Default (Recommended)** first with the exact description **Clean surfaces, crisp type, quiet contrast.**, then two contextual alternatives from the shared lifecycle's full twelve-direction catalog. Personalize the alternative selection using relevant existing memories and quickly available authorized context; never use a fixed pair. Keep descriptions to at most eight words and apply the selected preset's internal character and density consistently. A Codex pet is optional only when the user supplies an authorized genuine asset that fits the request; never generate, imitate, trace, search for, or assume one. Make dark surfaces accessible, require verified live/urgency claims, and never imply ornamental terminal controls execute. Follow the shared lifecycle's private, evidence-feasible image-generated design-reference workflow before implementation unless the user explicitly declines images.\n\n**Complete canvas, personalized focus:** Keep every grounded **Home**, **Accounts**, and **Pipeline** capability available regardless of the chosen goal. Place a concise **Your focus** module at the top of Home only when that saved goal has relevant verified account priorities/changes, opportunity risks/blockers, or upcoming meetings/follow-ups; never invent a priority, change, task, forecast, or metric to fill it. For **Account priorities and changes**, show both the grounded next action and the latest verified change together when both exist; the action must never silently replace the selected account-change evidence. Make account search, scoped group filters, sourced priority sorting when genuine scores exist or accessible alphabetical sorting of verified account names when they do not, verified stakeholders/checklists, and safe CRM account links available within this same durable dashboard, never a competing one-off page.\n\n1. If already-available evidence confirms the current user is not a seller or account owner and no authorized target was supplied, offer a clearly labeled empty **placeholder**, an evidence-grounded **representative** dashboard, or an explicitly identified **target user** under the shared lifecycle; an unknown role is not a mismatch. For real views, resolve the seller, explicit owner/territory/named-account scope, and **complete owned-account universe** from CRM or sufficiently authoritative supplied records. Include accounts without open opportunities; supporting sources may contextualize but never create or override that universe or CRM-owned truth.\n2. For a requested working seller dashboard, generate the authoritative initial HTML with the real `render_real_dashboard.py` helper and its retained `../demo-exec-and-seller-dash/assets/account-priority-workspace.template.html` scaffold; never replace the renderer with an ad-hoc static page. Personalize **Home**, **Accounts**, and **Pipeline**, requested additional sections, data, layout, and flows without breaking the generated grounded payload or its real interactive controls; omit unsupported or nonworking controls without removing functional canonical interactions.\n3. Populate **Home** with verified customer requests, upcoming meetings, outstanding follow-ups, recent changes, and review items. Populate **Accounts** with every owned account exactly once, relationship status, supported descending priority signals, verified reply-needed items, stakeholders, history, and a safe next action; omit unsupported optional scores, status widgets, and empty sections, and preserve verified zero values.\n4. Populate **Pipeline** with every grounded opportunity once, grouped by its current customer blocker; preserve actual CRM stage, verified value, renewal/expansion motion, and the next practical action. When a verified upcoming meeting controls progress, surface meeting preparation in both account and opportunity context.\n5. For the broad ongoing Home/Accounts/Pipeline dashboard, follow the production renderer's grounded persona payload, **not** the legacy `references/template-payload.schema.json` ranking-pane contract. Preserve verified source provenance, source-category status and impact, links, and private `evidenceGaps`; add `seller`, `accountDetails`, and `connectedSources` only from evidence. Unsourced account rank, value, priority score, status, and owner subfields are optional and MUST be omitted. Keep source account order without invented ordinal badges or priority labels; never show or narrate `Value unavailable`, `Unavailable`, `Not available`, or compatibility sentinels. Preserve legitimate zero values and distinguish account value from each opportunity amount.\n6. Use `workNow`, `watch`, and `paused` only as compatibility collections; they must not remove owned accounts, replace the default views, or make a ranked shortlist the entire dashboard. Keep meetings separate from recent communications and label reply state only when established. Never fabricate accounts, ownership, contacts, stakeholders, sources, meetings, replies, dates, urgency, scores, values, forecast targets, movement, or scenarios.\n7. Render grounded JSON or an explicitly marked empty placeholder with `../../scripts/render_real_dashboard.py --persona seller --mode <real|placeholder|representative> --payload <verified-payload.json> --project-dir <stable-user-owned-project>`. When the user explicitly requests `index.html` in the private working directory, use `--project-dir \"$PWD\"` and verify the complete self-contained `$PWD/index.html`. The renderer-created structural HTML and JavaScript are authoritative: never `apply_patch`, replace, rewrite, or move their existing controls after rendering; refine the verified payload or supported style inputs and rerun the same production renderer. Keep the canonical `tab-home`, `tab-accounts`, `tab-pipeline` controls correctly linked to `view-home`, `view-accounts`, `view-pipeline`; preserve `accounts-list`, `account-search-clear`, `account-drawer`, and `account-drawer-close`. The `priority-sort` button MUST remain inside the original `priority-column` table header; keep `aria-sort` on that same header and verify a real click toggles its direction and the grounded account order. When no genuine priority scores exist, never invent them: keep the separate `account-name-sort` button inside its original `account-name-column` header and verify it alphabetically orders actual verified account names, reverses them, and resets to the original source order with truthful `aria-sort`. Never create `account-sort-column`, move the priority button onto an account-name/value column, or replace a true priority score with account value. Exercise actual Home/Accounts/Pipeline activation, keyboard and ARIA state, search, grounded filters, priority sorting when genuine scores exist or grounded account-name sorting otherwise, and the account-details drawer; repair any broken interaction before returning. Never use the fictional demo renderer or fictional Meridian fixtures; the production helper safely embeds the payload and preserves existing customized HTML during data refreshes.\n\n## Existing Dashboard And Publication\n\n- Identify an existing dashboard only from the current linked Site, the project's `.openai/hosting.json` project ID, or one unambiguous owner/persona/scope match; authoritative user-provided identity/path is sufficient without file inspection. Never select fictional Meridian, another user's dashboard, an unrelated site, an incomplete identity, or an ambiguous candidate.\n- Reuse the matching private dashboard's existing project, URL, source, and user customizations. For one matching unpublished local project, follow the shared existing/modify/new choice; create a duplicate only on explicit **Create new**, and never replace a customized page with the original template.\n- Without a matching private Site, create and iterate in a stable user-owned local project. Return the working local dashboard and offer a private Site; do not create, publish, externally share, or change hosting until the user explicitly agrees. This local-first requirement overrides the Sites skills' normal automatic-publication default.\n- Return the actual existing-site or local dashboard link first, followed by a concise grounded summary, material evidence gaps, and exactly one next step from the shared lifecycle.\n\n## Explicit Account Ranking\n\n- Enter this narrower mode only when the user explicitly requests a ranked-list deliverable, ranking-only worklist, account focus, or weekly priorities. A broad ongoing dashboard that also says \"prioritize accounts\" remains the normal Home/Accounts/Pipeline workflow and never authorizes invented ordinal ranking.\n- Honor the user's named accounts, owner, territory, ranking basis, motion, and capacity first. Default an otherwise broad ranking request to CRM-backed open opportunities, mixed net-new/expansion motion, and deal value or ACV adjusted for timing, momentum, risk, why-now evidence, reachable contacts, actionability, and available seller capacity.\n- Apply [suppression and fallbacks](references/suppression-and-fallbacks.md). Keep each account in exactly one of **Suggested Focus**, **Monitor**, or **Suppress Or Block**; if a duplicate-outreach risk still permits a distinct safe action, retain it in Suggested Focus and explain that constraint. Suppress or block only when no seller action is appropriate.\n- Show source-backed why now, contacts, commercial context, motion, safe next action, confidence, evidence gaps, and **Source & Run Details** covering account set, ranking basis, source of truth, motion goal, source coverage, assumptions, and material limitations. Prefer fewer executable rows over fabricated certainty.\n- When stable source-of-truth links exist and the user explicitly requests the legacy ranked-list pane, render the retained `assets/account-priority-pane.template.html` inside the same durable seller project. Only this explicit pane uses `references/template-payload.schema.json`, its required legacy `rank`/`value` fields, and its value-compatibility sentinel; never apply those requirements to a broad dashboard. Preserve its exact template, map Suggested Focus/Monitor/Suppress Or Block to `workNow`/`watch`/`paused`, escape every JSON `<` as `\\u003c`, and replace `__PRIORITIZE_ACCOUNTS_DATA_JSON__` exactly once.\n- For an unlinked supplied list, use a grounded chat ranking unless an offline interactive view is explicitly requested. When a requested dashboard cannot be rendered, organize chat fallback under Home, Accounts, and Pipeline; keep ranking-only fallback in the three ranking groups with evidence gaps and source details.\n\n## Follow-Ups And Safety\n\n- For a substantive explicit ranking-only request with reusable scope, first check active and paused matching automations under `$CODEX_HOME/automations/*/automation.toml`, or `~/.codex/automations/*/automation.toml` when unset. Only if none matches, offer one weekly read-only rerun of `seller-account-dashboard` carrying forward the same owner/account scope, ranking basis, motion, and suppression rules; never offer ranking automation solely for a broad account dashboard or alongside its separate full-dashboard refresh.\n- Do not create an automation, access restricted CRM data, send outreach, schedule meetings, update CRM, create records, externally share, publish, or change hosting without the separately required explicit authorization and normal security controls.\n"},"changes":[{"path":"/included_files","type":"changed","before":[{"relative_path":"assets/account-priority-pane.template.html","size_in_bytes":42796},{"relative_path":"references/suppression-and-fallbacks.md","size_in_bytes":1669},{"relative_path":"references/template-payload.schema.json","size_in_bytes":4595}],"after":[{"relative_path":"agents/openai.yaml","size_in_bytes":289},{"relative_path":"assets/account-priority-pane.template.html","size_in_bytes":42796},{"relative_path":"references/suppression-and-fallbacks.md","size_in_bytes":1669},{"relative_path":"references/template-payload.schema.json","size_in_bytes":4595}]}],"summary":"Fields changed: 1. /included_files.","summary_kind":"deterministic","summary_metadata":{}}