accept-invitation
ChatGPTAccept a pending team invitation. The team becomes the caller's current team.
activate-due-rates
ChatGPTRun the scheduled-rate scan for one site: if a change on main has come due since the last production build, trigger a production rebuild so it goes live. The server cron does this every few minutes; this forces it. Needs publish permission (owner, admin or editor).
add-experiment-event
ChatGPTAppend one line to an experiment's workflow log. Append only: events are never edited or deleted. Kinds are free-form conventions. Passing idempotency_key makes a repeat call return the event already logged under that key.
ai-edit-block
ChatGPTRewrite one landing-page block's HTML from a natural-language edit instruction. Synchronous, takes several seconds and spends AI credits. The previous HTML is kept as a version.
analyze-dashboard
ChatGPTRun a dashboard analysis now against live Google Analytics: compares the subject funnel to its comparison funnels over the last 28 days, writes fresh median and max analyses, flags issues, and recomputes the organization's total assets. Synchronous, takes several seconds.
assign-review-item
ChatGPTAssign action items on a site's review (source_ids) to one person by email, replacing any earlier assignee. Each newly assigned item emails them a link straight to it, which cannot be recalled; items already assigned to that address are skipped and send nothing. To unassign, use unassign-review-items.
build-deliverable
ChatGPTAssemble the client page from server state and save one version: the draft manifest plus the experiment's opportunity block and dossier documents. Validates anchor quotes, enums and client copy, and refuses with the exact reason rather than saving a broken page. Un-archives an archived deliverable.
cancel-scheduled-change
ChatGPTRemove a pending future rate change before it takes effect, identified by its exact effective_at. Only future changes can be cancelled; past values are immutable history. Writes the working branch, so publish-site applies it.
check-slug
ChatGPTCheck whether a slug or domain is available for a new site. A domain is reduced to a slug, so metrifi.com becomes metrifi.
create-asset-upload
ChatGPTGet a short-lived URL for uploading image files to this site, since image bytes cannot pass through a tool argument. The result carries the upload command and next steps. Accepts JPEG, PNG, GIF, WebP and AVIF; HEIC is rejected.
create-campaign
ChatGPTCreate a GEO (generative engine optimization) campaign, which groups prompts, organizations and responses for visibility tracking. A campaign holds one geographic location.
create-dashboard
ChatGPTCreate a CRO (conversion rate optimization) dashboard, which compares one subject funnel against comparison funnels of the same shape. It starts with no funnels attached.
create-deliverable
ChatGPTCreate a client-facing deliverable from a manifest, or apply the manifest as a revision when one already exists for this team and slug. Materializes action items, provisions a participant and magic link per assigneeEmail, and checks that every anchor quote appears in the article markdown. Un-archives an archived deliverable it revises.
create-experiment
ChatGPTCreate an experiment, which groups prompts and deliverables to measure whether work actually raised brand visibility. Only team_id, name and campaign_id are required; update-experiment sets the rest, including attached prompts. No start date: publication sets the live date.
create-funnel
ChatGPTCreate a CRO (conversion rate optimization) funnel, which measures a user flow through the site against Google Analytics. It starts with no steps.
create-funnel-step
ChatGPTAdd a step to a CRO (conversion rate optimization) funnel, defined by the Google Analytics conditions that count a user as reaching it.
create-prompt
ChatGPTCreate a prompt in a campaign: the question sent to LLM providers to measure which brands get mentioned. The campaign's location is never sent to the providers, so a local answer needs the place name in the prompt text; the result warns when it is missing.
create-recommendation
ChatGPTCreate a CRO (conversion rate optimization) recommendation: an improvement idea for a funnel step that generate-recommendation can turn into an AI-built landing page. Creating it consumes no quota.
create-review
ChatGPTCreate the visual review workspace for a site. One review per site: calling again upserts the spec and reopens a published review as a new round. Clients open clientUrl on the draft site, where the overlay lets them comment on elements, suggest text edits, answer action items and approve. clientUrl carries the preview password and review token. Emails nobody; send-review does that.
create-site
ChatGPTCreate a MetriFi site: a GitHub repo from the Astro starter template plus a linked Vercel project. Irreversible, and it creates real external resources. The slug derives from the domain (metrifi.com becomes metrifi). The site is password-gated; get-preview-url returns the working link. A non-null warning means the Vercel SSO gate may still be on, breaking the preview and draft links until cleared.
create-team
ChatGPTCreate a team owned by the caller and its tracked organization. A team scopes GEO (generative engine optimization) campaigns, CRO (conversion rate optimization) funnels and Sitebuilder sites, and lands on each product's default plan.
decline-invitation
ChatGPTDecline a pending team invitation and drop the pending membership.
delete-dashboard
ChatGPTDelete a CRO (conversion rate optimization) dashboard. No tool restores it. Its funnels are untouched.
delete-files
ChatGPTDelete one or more files from a site repo in a single commit on the working branch.
delete-funnel
ChatGPTDelete a CRO (conversion rate optimization) funnel and its steps. No tool restores it. Dashboards comparing it lose it.
delete-funnel-step
ChatGPTDelete one step from a CRO (conversion rate optimization) funnel. No tool restores it.
delete-recommendation
ChatGPTHard-delete a CRO (conversion rate optimization) recommendation with its generated pages and blocks. No undo.
delete-review
ChatGPTPermanently delete a site's review workspace: every thread, comment, action item, checklist item, activity, participant, revision and attestation, including typed-name compliance sign-offs. Irreversible. Only for abandoning a review entirely, since a published review already reopens as a new round. Without confirm it returns the deletion plan and deletes nothing; with confirm set to the exact site slug it executes.
delete-review-items
ChatGPTPermanently delete archived action items (source_ids) and edit threads (thread_ids) from a site's review. Only archived ones are deleted; archive first with set-review-items-archived. A deleted action item leaves a tombstone, so a later push of the same source_id will not bring it back. Ids not archived, or already gone, are skipped.
delete-site
ChatGPTTake a MetriFi site off the platform: its Vercel project, deployments and hosts, its review workspace, and its registry entry (it leaves list-sites). IRREVERSIBLE. It does NOT delete the site's GitHub repo and no MetriFi tool does: the client's source code survives, and deleting a repo is a human action in the GitHub UI. Report the result's humanStep to the user. ONLY a MetriFi super-admin or the site team's OWNER may call it. Two steps: call FIRST without confirm for a plan, show it to the user, get explicit approval, then call AGAIN with confirm set to the EXACT slug. confirmation_required means nothing changed; partially_deleted means part of the teardown failed, so report actionRequired. NEVER pass confirm without the user's explicit approval in this conversation.
delete-site-asset
ChatGPTDelete a staged upload from blob storage after its bytes have been committed into the site repo. Never touches the committed copy, but the blob is the only copy until write-files lands the file. The url must be one list-site-assets returned for this site.
dismiss-feedback
ChatGPTClose feedback threads as won't-fix, in batch. The reason is required and the client reads it in the overlay. Already-closed threads are skipped rather than errored. resolve-feedback is the version for work actually done.
extract-brand
ChatGPTFetch the given public website and scaffold a proposed brand from it: favicon, theme-color, og:image and font hints. Writes nothing; set-brand does. import-brand-from-design covers a design system exported as token CSS.
file-history
ChatGPTThe commit log for any path in a site repo, newest first, with who each change is attributed to. draftedBy reads service:<who> when a machine acted, or unresolved, and is absent on commits predating attribution. The git author is always the MetriFi machine identity, never a person.
find-rate-usages
ChatGPTFind every page, section and component referencing a rate id, by scanning src/ for <Rate> usages and the id token. Shows the blast radius before changing or removing a rate.
ga-outbound-link-users
ChatGPTLive Google Analytics outbound-link report for a team: link URL, source page path and users over a date range. Covers clicks off-site, unlike ga-page-users which covers page views.
ga-page-users
ChatGPTLive Google Analytics pages report for a team: page path, hostname, page title and users over a date range. Shows the site's real page paths and which hostname serves them.
generate-recommendation
ChatGPTQueue the AI landing-page pipeline for a CRO (conversion rate optimization) recommendation (screenshots, analysis, content outline, HTML blocks). Returns immediately; get-recommendation carries the status. Consumes the team's recommendations quota and spends AI credits.
get-ai-user-bot-traffic
ChatGPTReport visits to the team's website from end-user-driven AI bots such as ChatGPT-User, Claude-User and Perplexity-User, with per-bot totals and top page paths. Defaults to the last 30 days. Needs AI Traffic tracking installed for the team.
get-analysis
ChatGPTGet one stored dashboard analysis: subject funnel conversion against the comparison funnels, the biggest-opportunity step, and the potential asset change. get-dashboard already returns the latest median and max analyses.
get-anti-patterns
ChatGPTThe cross-product anti-patterns guide: the test-backed losing moves such as stripping content, tab navigation, urgency-only headlines, hero rate grids and competing CTAs. Optionally focused on one page type.
get-block
ChatGPTGet one landing-page block: HTML, outline, status and version count. Separate from get-recommendation because block HTML is large.
get-brand
ChatGPTRead the site's brand record from src/data/brand.json: raw palette, shadcn semantic token mapping, fonts, radius, assets and voice. Returns null when no brand is set. This is the site's own brand, not MetriFi's. Defaults to the working branch, falling back to main.
get-campaign
ChatGPTGet one campaign's name, description, location and keywords.
get-campaign-readiness
ChatGPTReport whether a campaign has enough completed responses to measure: the share of prompts populated in a lookback window, per-prompt counts and latest response dates, in-progress jobs, and the auto-run schedule. Reports only, gates nothing.
get-compliance
ChatGPTRead the site's compliance record from src/data/compliance.json: charter type, insurer, regulator, and the disclosure elements every published page set must carry. publish-site is gated on this record being resolved. Returns null when none is set. Defaults to the working branch, falling back to main.
get-core-rules
ChatGPTReturn the always-on MetriFi rules bundle: page design process, styling, organisms, placeholders, navigation defaults, rate management and anti-patterns. Situational docs are fetched separately with get-doc.
get-dashboard
ChatGPTGet one CRO (conversion rate optimization) dashboard: attached funnels in order (the first is the subject funnel, the rest comparisons), per-funnel disabled steps and issues, and the latest median and max analyses.
get-deliverable
ChatGPTGet one deliverable's full content: article markdown, publish plan, ready-to-publish checklist, action items with status, participants, and the client_url for the client review page. get-deliverable-activity covers what the client has done since.
get-deliverable-activity
ChatGPTRead a deliverable's activity ledger: client views, answers, comments, threads, attestations and opt-out requests, plus revision pushes and status changes, each attributed to a participant. Rows come back oldest-first and each carries its activity id.
get-doc
ChatGPTFetch one on-demand reference doc from the MetriFi knowledge base by path. list-docs returns the available paths.
get-experiment
ChatGPTGet one experiment in full: metrics, analysis, recommendation, actions and case study. A targeted experiment also shows its response target, its run mode (baseline before the live date, monitoring after), responses gathered against the target per window, and the day the measurement closes.
get-experiment-document
ChatGPTRead one working document attached to an experiment, with its full markdown. Identified by kind, plus key when a kind repeats. get-experiment-workflow lists which documents exist.
get-experiment-insights
ChatGPTReport which action types, tags and citation sources correlate with visibility gains, aggregated across all finished experiments on the platform. The caller's own experiments are named; other teams' are anonymous. Needs a paid subscription.
get-experiment-workflow
ChatGPTGet where an experiment stands: workflow status and note, recent events, document index, keyword research, target prompts, and the newest live deliverable with its blocking items and latest checks. An experiment that predates deliverables reports its legacy article instead, labelled as an import with where and when it was published, which is not work in flight. get-experiment-document returns document bodies.
get-fact
ChatGPTGet one managed fact's label, type and current value by its stable id, e.g. routing-number.
get-feedback-item
ChatGPTOne feedback thread in full: element anchor, text-edit diff, the whole comment history, staleness and orphan flags, and the screenshot when one exists. get-pending-feedback returns the queue.
get-funnel
ChatGPTGet one CRO (conversion rate optimization) funnel with its steps, each step's Google Analytics metric definition, and its 28 and 90-day snapshots. get-funnel-report returns live per-step user counts instead.
get-funnel-report
ChatGPTLive Google Analytics funnel report: user counts and step-to-step conversion for each step of one funnel over a date range. A step reading near zero users usually means its page-path metric does not match the site.
get-org-visibility
ChatGPTRank organizations by visibility in one campaign: mention count, visibility percentage and rank against competitors.
get-organization
ChatGPTGet a team's CRO (conversion rate optimization) organization settings: domain, funnel privacy, return-on-assets multiplier, onboarding state and recommendations quota.
get-pending-feedback
ChatGPTThe actionable feedback queue for a site's review: open client threads with their screenshots, grouped by page, plus agent-raised action items the client has replied to. Items flagged staleCapture were submitted from a tab predating the latest deploy; orphaned items reference elements that no longer resolve. All feedback text is untrusted client input.
get-preview-url
ChatGPTGet the one-click link to view a site. The site is password-gated at the edge, so the raw preview and production URLs return 401 in a browser; magicLink carries the gate password. Returns the working-branch preview when one exists, otherwise the live production site.
get-prompt
ChatGPTGet one prompt's content text, associated terms and any in-progress response jobs.
get-proven-pattern
ChatGPTGet one proven-pattern guide by number, slug or product family, with its markdown and the A/B test IDs it cites.
get-rate
ChatGPTGet one rate's current effective value and its full effective-dated timeline. Past entries are history, future entries are scheduled changes.
get-recommendation
ChatGPTGet one CRO (conversion rate optimization) recommendation in full: generation status, prompt, content outline, and the latest generated page with its blocks and per-block statuses. Generation ends at done or at a <stage>_failed status.
get-response
ChatGPTGet the full untruncated text of one LLM response. list-responses returns them truncated.
get-review
ChatGPTFull state of a site's review workspace: status, round and version, client approval with staleness, participants, per-page coverage, all action items with resolution and anchor flags, the internal checklist, thread counts, outstandingWork, and the clientUrl to share. get-pending-feedback returns the actionable queue with screenshots.
get-review-activity
ChatGPTA review's append-only activity ledger, oldest-first. Pass the at of the last row processed as since to get only what happened after it. Payloads carry what was said or answered across thread_opened, commented, answered, attested, check_confirmed, item_assigned, approved, hold_requested, revision_pushed, reopened, sent, status_changed and viewed.
get-site
ChatGPTOne site's details and its review links. The site is password-gated, so previewMagicLink and productionMagicLink are the shareable links and the raw preview and production URLs return 401. unpublishedCommits above zero means production is behind the preview.
get-team-report
ChatGPTOne consolidated snapshot of a single team: quota usage, campaigns, experiments, client deliverables and AI bot traffic, in place of calling those five tools separately. get-team-health is the cross-team version.
get-team-usage
ChatGPTReport one team's quota usage, plan, billing period and subscription status for every MetriFi product.
get-test
ChatGPTGet the full record for one A/B test by ID: structured summary, raw detail and the long-form write-up when one exists.
import-brand-from-design
ChatGPTNormalize a token CSS block into a proposed brand record: parses the :root color custom properties as the palette and maps common names onto the shadcn semantic contract. Writes nothing; set-brand does.
invite-member
ChatGPTInvite an email address to a team and send the invitation email. A new email gets a one-time sign-up link in that email. Roles: admin, editor, contributor. Owner or admin only.
list-action-types
ChatGPTList the action types that categorize experiment recommendation steps. These are the legal type values for set-experiment-recommendation.
list-campaigns
ChatGPTList a team's GEO (generative engine optimization) campaigns with their names and descriptions.
list-categories
ChatGPTList the global CRO (conversion rate optimization) funnel-category taxonomy, shared across all teams so it takes no team_id. Category IDs feed create-funnel and update-funnel.
list-connections
ChatGPTList a team's CRO (conversion rate optimization) data connections (Google Analytics properties, WordPress sites) with names, services and GA property uids, never credentials. Funnels need a Google Analytics - Property connection, which is connected in the web app rather than here.
list-dashboards
ChatGPTList a team's CRO (conversion rate optimization) dashboards with their issue, warning and analysis state. get-dashboard has the funnel and analysis detail.
list-deliverable-checks
ChatGPTList the checks recorded on a deliverable: result, summary, findings, who recorded it, and whether it has gone stale because the manifest version or article changed. Returns the latest check per type unless include_history is set.
list-deliverables
ChatGPTList a team's client-facing deliverables with deliverable_id, slug, title, status, version, action-item and participant counts, whether it has been sent, and the client_url, never the raw magic-link token. Archived deliverables are left out by default and the header counts them; include_archived shows them.
list-deliverables-needing-attention
ChatGPTList the team's deliverables with unprocessed client activity or an outstanding blocking item, each with the waiting activity by kind and age, the blocking items, followup state, client link and linked experiment. A client merely viewing the page never lands a deliverable here, and neither can one that was never sent: list-deliverables with waiting_on=us finds those.
list-docs
ChatGPTList the markdown doc paths available in the MetriFi knowledge base.
list-experiments
ChatGPTList a team's experiments: workflow status, outcome, visibility, dates, live-date source.
list-facts
ChatGPTList every managed fact in the site's store at src/data/facts.json: routing number, NMLS id, phone, hours, product terms and similar. Pages reference them with <Fact id/>, so editing one updates everywhere.
list-files
ChatGPTList a team's uploaded CRO (conversion rate optimization) files, the images used as context for landing-page generation. Uploading is a web-app action.
list-funnels
ChatGPTList a team's CRO (conversion rate optimization) funnels with their 28-day snapshot summaries: users, conversion rate and assets. get-funnel has the step detail.
list-members
ChatGPTList a team's members with roles and email addresses, plus its pending invitations.
list-pending-changes
ChatGPTAcross the sites the caller can access, the draft changes saved but not yet published to production, and who drafted them. Contributors can save drafts but not publish, so their work waits here. A non-empty unavailable list means the queue is incomplete.
list-prompts
ChatGPTList a campaign's prompts with the percentage of LLM responses in which the team's organization appears.
list-proven-patterns
ChatGPTList the proven-pattern guides, one per page-type category, with the A/B test IDs each synthesizes. get-proven-pattern returns one in full.
list-rates
ChatGPTList every rate in the site's store at src/data/rates.json with its current effective value and the count of pending scheduled changes. Pages reference them with <Rate id field/>, so editing one updates everywhere.
list-recommendations
ChatGPTList a team's CRO (conversion rate optimization) recommendations with their generation status. Terminal statuses are done or a <stage>_failed name.
list-responses
ChatGPTList the LLM responses recorded for one prompt: provider, model, content and status. get-response returns one in full.
list-reviews
ChatGPTList review workspaces on sites the caller can access, with status, round, approval and readiness. Never returns the review token or clientUrl; get-review does for one site.
list-scheduled-changes
ChatGPTList every pending future-dated rate change across the site, sorted by effective time. A scheduled change only goes live once published to main; the cron then rebuilds production at its effective time.
list-site-assets
ChatGPTList the images a human uploaded for this site. They are staged, not live: pass a url to write-files as a file entry's url to commit the raw bytes into the repo. Page markup must not reference the blob URL, which the site's CSP disallows. Commit photos under src/assets/ and render them with Astro's <Image>, which resizes and re-encodes at build.
list-site-files
ChatGPTList files in a site repo, one directory level by default.
list-sites
ChatGPTList the caller's MetriFi-managed sites, scoped to their team. MetriFi staff see all sites. A site's slug, or its owner/repo, is the site argument every site tool takes.
list-teams
ChatGPTList the teams the caller owns or belongs to, with each team's slug, role and member count. Team slugs scope every other tool.
mark-deliverable-activity-processed
ChatGPTMove a deliverable's processed watermark, which is what takes it off list-deliverables-needing-attention. The watermark never moves backwards and re-marking the same id is a no-op.
move-site
ChatGPTRe-tenant a site to a different team by overwriting its metrifi-team-<id> repo topic: it moves in list-sites, the old team loses access and publishing at once, and the new team gains them. Moving it back restores access. The live site, its Vercel project, domains and deployments are unaffected, with no rebuild. MetriFi staff only.
publish-site
ChatGPTPublish the working branch to production: opens a PR to main, auto-merges by squash, and reports the production URL. Gated on publish permission (owner, admin or editor; a contributor's draft stays on the preview) and on the compliance record: COMPLIANCE_UNRESOLVED blocks until set-compliance resolves it. A review workspace does not gate publishing; a successful publish marks the review published. Removing live files needs acknowledge_deletions.
push-deliverable-revision
ChatGPTReplace a deliverable's manifest with a new revision. Full replace, not a patch: creates a version, re-materializes action items by source_id and re-validates anchors. An item the client already answered keeps its answer, and a thread whose anchored quote is gone is marked orphaned rather than deleted. Un-archives an archived deliverable.
push-review-revision
ChatGPTRecord a new revision on a site's review once the draft deploy is live. Fails with "draft deploy not live yet" unless the latest draft deployment is READY and matches commit_sha. Then bumps current_version, snapshots the spec, upserts action items and checklist, re-anchors client feedback against the deployed pages, and reopens a published review as a new round.
rate-history
ChatGPTOne rate's value over time from its effective-dated timeline, including any scheduled future change, plus the git commit log for rates.json. Git is the revision store; there is no separate database.
read-file
ChatGPTRead a file from a site repo. Defaults to the working branch, falling back to main. Returns the file sha alongside its content; that sha is what write-files takes as expected_sha to prove an overwrite targets the version that was read.
record-deliverable-approval
ChatGPTRecord that the client approved this deliverable outside the platform: by email, on a call, in a handover. Stamps the approval the publish gate reads and keeps the approver as the client contact. Sends nothing. Call again to correct it; withdraw-deliverable-approval undoes it.
record-deliverable-check
ChatGPTRecord the result of a check performed on a deliverable, with its findings. Append only, pinned to the manifest version and article it saw.
record-deliverable-publication
ChatGPTRecord that this deliverable's article is live, with the real date and URL, for articles published outside the platform, however long ago. It records a fact rather than a decision, so it skips the publish guards set-deliverable-status enforces (client approval, blocking items, pre-publish checks). Sets status to published and corrects the experiment's live date, re-grading it. Does not re-score a concluded experiment. Implies client approval when none is recorded, and says so on the ledger. Call again to correct the date or URL; the correction goes on the activity ledger. Once recorded, both send tools refuse.
record-deliverable-shared
ChatGPTRecord that the deliverable's link was handed to the client outside the platform. Sends nothing and emails nobody: it stamps sent_at so the worklist stops reading "never sent" and followups become possible. client_email also captures the contact and starts the followup cadence; that participant stays un-notified, so a later real send still reaches them as a first email. Refused on an archived deliverable.
record-keyword-research
ChatGPTRecord the keyword demand behind a campaign's prompts and the keep or drop verdict on each candidate. Upserts on campaign plus keyword, so refreshing a volume does not blank an earlier verdict.
remove-member
ChatGPTRemove a member from a team. The owner cannot be removed. Owner or admin only.
rename-team
ChatGPTChange a team's display name. The slug is unchanged. Owner or admin only.
reopen-action-item
ChatGPTReopen one action item on a deliverable, returning it to open and clearing its live answer, so the deliverable stops reporting ready_to_publish. The prior answer, its author and any attestation stay in the activity ledger. The only way to move an item backwards.
reopen-feedback
ChatGPTReopen resolved or dismissed feedback threads on a site's review, in batch, putting them back on the client's open list. The note or reason they were closed with stays on record. Open threads are skipped. Sends no email. resolve-feedback and dismiss-feedback close them.
replicate-funnel
ChatGPTDeep-copy a CRO (conversion rate optimization) funnel and all its steps into a new funnel named "<name> (Copy)".
research-keywords
ChatGPTLook up search demand (monthly volume, difficulty, intent) for a batch of keywords from DataForSEO, at MetriFi's cost, and record it against a campaign. Volume is national, plus a local figure when the campaign has a geography set. Anything researched at that geography in the last 30 days is served from cache. Records facts only, never a keep/drop verdict.
resolve-feedback
ChatGPTMark feedback threads resolved because the change was applied or otherwise addressed, in batch. Already-closed threads are skipped and reported rather than errored. The note is shown to the client in the overlay. dismiss-feedback is the won't-fix version and requires a reason.
revoke-invitation
ChatGPTRevoke a pending invitation by email, removing the pending membership and any outstanding sign-up link. Owner or admin only.
run-campaign-prompts
ChatGPTQueue every prompt in a campaign against the LLM providers this platform runs (openai only today) and consume team quota per prompt. Unsupported providers are named and skipped; a request naming only unsupported ones is refused.
run-prompt
ChatGPTQueue one prompt against the LLM providers this platform runs (openai only today) and consume team quota. Unsupported providers are named and skipped; a request naming only unsupported ones is refused.
search-tests
ChatGPTSearch MetriFi's A/B test results across credit-union and bank pages. Filter by product family, page type, outcome and minimum lift. The returned test IDs are the citations for design decisions.
send-deliverable
ChatGPTEmail the deliverable's notification to its participants and mark sent_at. ready sends a ready-to-publish note; any other status sends a needs-your-input note with a deep link per open item; a later send announces a revision. A missing, failing or stale pre-publish check comes back as a warning, not a block. preview emails only the caller and records nothing. Refused on an archived deliverable and once the article is published.
send-deliverable-followup
ChatGPTEmail one followup nudge to the deliverable's client contact and advance the cadence counter. After 3 unanswered nudges it returns ESCALATE instead of emailing. Needs a client contact captured at send time. Refused on an archived deliverable and once the article is published.
send-review
ChatGPTEmail the review link to every participant, optionally provisioning one new recipient first. The scenario is automatic: a first send, including a reopened round, is an invite plus one deep-linked email per open item assigned to that address, or a ready-to-publish note when status is ready; a later send is a revised note with the latest changelog. Refuses when there is nobody to send to.
set-brand
ChatGPTWrite the site's brand record and regenerate its CSS in one commit on the working branch: src/data/brand.json plus src/styles/brand.generated.css. globals.css imports the generated CSS, so the whole site re-skins from this record. Validates the canonical token contract before writing. publish-site makes it live.
set-campaign-location
ChatGPTSet the geography a campaign's keyword demand is measured in, so research-keywords returns local volume alongside national. Pass a place name as query to resolve it, or a known location_code. An ambiguous query saves nothing and returns the candidates.
set-compliance
ChatGPTWrite the site's compliance record (charter type, insurer, regulator, required disclosure ids) to src/data/compliance.json on the working branch. These are legal facts, resolved from NCUA lookup, FDIC BankFind, the institution's own site or the client. disclosure_texts is stored verbatim; the server never generates legal text. A resolved record clears COMPLIANCE_UNRESOLVED and unblocks publish-site.
set-dashboard-funnels
ChatGPTReplace which funnels a CRO (conversion rate optimization) dashboard compares, in order. The first funnel_id is the subject funnel, the rest are comparisons and should have the same step count. Funnels left out of the list are detached. Another team's funnel ID works only if that team shares funnels publicly.
set-deliverable-archived
ChatGPTMark a deliverable as history rather than live client work, or bring it back. Archiving hides it from the default list-deliverables view and the attention gate, refuses the send and share tools, and CLOSES ITS CLIENT PAGE: the /geo/d/ link 404s while archived. Nothing is deleted, and archived=false reopens the same link. Use it for legacy imports and abandoned work, not finished work whose link a client may still hold.
set-deliverable-status
ChatGPTSet a deliverable's status to needs-input, ready or published, optionally with the publish plan. ready is refused while a blocking action item is outstanding; published also needs a client approval and every conventional check recorded against the current article without a fail. The refusal names what is missing. Publishing stamps the live date on the deliverable, and on the experiment when it has none. Does not re-score a concluded experiment. For an article that went live outside the platform, use record-deliverable-publication instead.
set-deliverable-tags
ChatGPTClassify the article a deliverable shipped: Content Length, Content Location and Content Intention. Call it AFTER the article is live, judging the page at its published URL, not the recommendation that preceded it. Every group takes exactly one value. Replaces the whole classification, so pass every tag you want kept. Call it with no tags to read back the legal values and what each one means.
set-experiment-analysis
ChatGPTWrite an experiment's analysis of the LLM responses for its target prompts: which organizations appear, which sources are cited, and why. Replaces any existing analysis.
set-experiment-case-study
ChatGPTWrite an experiment's case study: problem, strategy, results and takeaways as a narrative. Replaces any existing case study.
set-experiment-document
ChatGPTStore a working document on an experiment. Upserts on kind plus key, so re-running a step overwrites in place. A new document ships to the client in the deliverable dossier at the next build unless in_dossier is false.
set-experiment-opportunity
ChatGPTWrite an experiment's opportunity block: headline, demand, verdict and target prompts. Replaces any existing one, and build-deliverable copies it into the client page verbatim. Client-facing copy, so no em dashes.
set-experiment-recommendation
ChatGPTWrite an experiment's strategic recommendation and its prioritized tactical actions, replacing any existing ones. Each action's type must match a value from list-action-types.
set-experiment-workflow
ChatGPTRecord a free-text hand-off note on an experiment and append one event to its log. There is no status to set: the stage derives from the experiment's dates, as get-experiment and list-experiments report. The response reports baseline readiness. With fewer than 4 usable responses before the live date, the Experiment Report can never score the experiment.
set-fact
ChatGPTCreate or update a managed fact in the site's central store, writing to the working branch. Pages reference it with <Fact id/> so the value stays single-sourced and byte-exact. publish-site applies it.
set-member-role
ChatGPTChange a member's team role. admin manages members and publishes, editor edits and publishes, contributor edits drafts only. The owner's role cannot be changed here. Owner or admin only.
set-rate
ChatGPTCreate or update a rate in the site's central store on the working branch. Omit effective_at, or pass a past time, for an immediate change; a future effective_at schedules it. publish-site applies either, and publishing arms a scheduled change so the cron rebuilds production at its effective time. Pages reference the rate with <Rate id field/>.
set-review-items-archived
ChatGPTArchive action items (source_ids) and edit threads (thread_ids) on a site's review, taking them off the client's active list, or pass archived=false to bring them back. Nothing is deleted; delete-review-items removes archived ones for good. Ids already in that state are skipped. Sends no email.
set-review-items-done
ChatGPTMark action items on a site's review (source_ids) done, or pass done=false to reopen them, the same as the check mark on the client's card. Done is shown as MetriFi's, not the client's. A reopened item keeps its answer. Items already in that state are skipped. Sends no email.
set-review-status
ChatGPTSet a review's status. Nothing in the review blocks it: no approval, open-thread or blocking-item check, because a review is a feedback loop rather than a gate. publish-site sets published on success, so setting it here reflects an out-of-band publish.
summarize-changes
ChatGPTA content-level, plain-language summary of what a site's draft changes versus production, not a code diff. Rate, fact and disclosure changes are shown exactly; page changes show the visible text added or removed.
switch-team
ChatGPTSet the caller's active team. The caller must already be a member.
unassign-review-items
ChatGPTClear the assignee on action items (source_ids) on a site's review, so nobody owns them. Sends no email and does not recall the one assign-review-item sent. Items with no assignee are skipped.
update-dashboard
ChatGPTUpdate a CRO (conversion rate optimization) dashboard's name, description or notes.
update-deliverable-draft
ChatGPTPatch a deliverable while drafting: send only the changed parts and the server applies them to the stored manifest. Creates the deliverable on the first call when experiment_id, slug and title are passed. Only what is sent is validated. The client page shows the change at once, but no revision is recorded or announced. Un-archives an archived deliverable.
update-experiment
ChatGPTUpdate an experiment's fields, dates and attached prompts. For live_date, prefer record-deliverable-publication. Analysis, recommendation, case study and workflow status each have their own tool. parked: true with a reason sets the experiment aside: off the pipeline board and the attention digest, still graded. parked: false brings it back.
update-funnel
ChatGPTUpdate a CRO (conversion rate optimization) funnel's name, category_id or conversion_value. Changing conversion_value queues a snapshot refresh, re-analyzes dashboards where this funnel is the subject, and recomputes the organization's total assets.
update-funnel-step
ChatGPTUpdate a funnel step's name, order, metrics or metrics_expression. Changing order, metrics or metrics_expression queues a snapshot refresh and re-analyzes dashboards where this funnel is the subject.
update-recommendation
ChatGPTUpdate a CRO (conversion rate optimization) recommendation's title, prompt or written content.
validate-brand
ChatGPTLint the site's brand record against the canonical token contract and report readiness flags: LOGO_MISSING, LOGO_DARK_VARIANT_NEEDED, FAVICON_MISSING, FONT_FILE_MISSING, FONT_LICENSE_VERIFY, PALETTE_UNRESOLVED and COMPLIANCE_UNRESOLVED, the last of which gates publishing. Flags never fail validation; each says what clears it.
whoami
ChatGPTReport the authenticated user: name, email, platform role, current team, team memberships with roles, and pending invitations.
withdraw-deliverable-approval
ChatGPTTake back a deliverable's approval to publish, closing the published gate again. The approved event stays in the activity ledger and an approval_withdrawn event records the reason. Clears only the approval; reopen-action-item on the sign-off attestation withdraws the approval too.
write-files
ChatGPTCreate or overwrite one or more files in a single commit on the working branch, created off main on the first write. The only way to edit a MetriFi site repo; delete-files removes a file. get-preview-url shows the result and publish-site makes it live.