agentleFS
fusebase-devfusebase-dev/fusebase-flow/.agents/skills/client-vs-internal/SKILL.md

client-vs-internal

Skill9 starsChanged 27 days agoMITView on GitHub

Use ONLY when docs/audience.md exists (audiences defined during onboarding) OR the operator explicitly asks to optimize a surface for client-facing vs internal use. Steers app surfaces differently — client-facing = simple/guided/trust-first; internal = robust controls/power-features. If docs/audience.md is absent and the operator did not explicitly request the posture check, this skill does nothing (silent no-op) — do NOT create the file. Not for projects without defined audiences.

The file

We split this skill into the rules it gives an agent

4 rules. About 0 are common, 3 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Do not activate when docs/audience.md is absent unless the operator explicitly requests the posture check and states the audience.

    line 116
  2. Distinctive:

    Do not make client surfaces Salesforce-complex.

    line 117
  3. Distinctive:

    Do not strip necessary controls from internal surfaces for "simplicity".

    line 118
  4. Distinctive:

    Do not leave the classification chat-only when a spec is in flight — posture rows become ACs (step 5) or they evaporate.

    line 119

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Client vs Internal

Style: Mode-B-lite. Artifact-gated by default — inert unless docs/audience.md exists or the operator explicitly requests the posture check.

Purpose

Client-facing teams build for two very different audiences. Clients need simplicity and trust (never Salesforce-complex); internal teams need robust controls and power-features. This skill applies the right posture to each surface, using the audiences defined at onboarding (or the audience the operator states when explicitly requesting the check).

When to invoke

  • docs/audience.md exists AND a UI/app surface is being designed or built.
  • Operator says "is this for clients or internal", "simplify for the client", "this is an internal tool".

Do not invoke when

  • docs/audience.md absent and no explicit operator request → silent no-op; do not activate or create it.
  • Non-UI / backend-only work with no audience-facing surface.

Required inputs

InputWhere it livesIf missing
Audience definitionsdocs/audience.md or the audience stated in an explicit operator posture-check requestSTOP — no-op only when both are absent. Do not create the file; onboarding (/onboard) creates it.
Surface being builtcurrent tasknothing to classify; exit

Procedure

  1. Existence gate (FIRST STEP). No docs/audience.md and no explicit operator posture-check request → exit silently. If the operator explicitly requested the check and stated the audience, continue with that audience without creating the file.
  2. Read docs/audience.md when present (which surfaces are client-facing vs internal; per-audience needs); otherwise use the audience stated in the explicit operator request.
  3. Classify the surface in scope: client-facing, internal, or shared.
  4. Apply the matching posture checklist (§ Posture checklists below): client-facing, internal, or shared — walk every row for the surface in scope; each row is pass / fail / N-A, not vibes.
  5. Persist — the classification must not evaporate in chat. If a spec is in flight (or being drafted) for this surface, hand the result to requirements-specification: the posture + each applicable checklist row becomes a numbered spec AC citing its ID (e.g., "AC7 — client-facing surface: destructive actions confirm with object + consequence before executing (client-vs-internal C2)"), alongside the QP-xx ACs from app-quality-patterns (C2/C4 overlap the QP delete-policy and empty/loading/error patterns — cite both IDs on one AC line, don't duplicate the AC). No spec in flight → record posture + failed rows in the design brief or change-note so Implement and code-review inherit them.
  6. Flag mismatches (e.g. exposing internal complexity to a client surface) and recommend the audience-appropriate alternative.
  7. Ambiguous audience → ask the operator (FR-19).

Worked example

Operator: "This billing settings page is client-facing; run the posture check."

  1. Classify Billing settings as client-facing from the explicit request.
  2. Apply C2 because cancellation is destructive.
  3. Spec AC: AC4 — Cancellation confirms the subscription and consequence before executing (client-vs-internal C2).

Output: client-facing posture + AC4 handed to requirements-specification.

Posture checklists

Apply per classified surface. Row IDs (C/I/S-n) are citable in spec ACs (step 5).

Client-facing — simple, guided, trust-first:

IDCheckConcretely
C1No internal jargon or raw IDsLabels/errors/emails use the client's domain words; no record IDs, status enums, table names, or team slang on any client-visible string
C2Confirm before destructiveDelete/cancel/send/submit-final actions show an explicit confirm naming the object + consequence; no one-click irreversible ops (overlaps QP delete-cascade ACs — cite both)
C3Guided defaultsHappy path completes with pre-filled sensible values and zero configuration; advanced options collapsed behind an explicit affordance
C4Reassuring empty/error/loading statesEmpty = what this is + the first step to take; error = plain words + what to do next, never stack traces or status codes; loading = visible progress (overlaps QP UI-polish patterns — cite both)
C5No admin affordancesNo bulk-delete, impersonation, raw-data export, config, or diagnostics reachable from client routes — removed, not hidden
C6Portal-embed + permission scopingSurface works embedded in the client portal (CLI skill fusebase-portal-specific-apps); every query scoped to the client's own records — verify the permission model, never assume

Internal — robust, efficient, transparent:

IDCheckConcretely
I1Bulk operationsMulti-select + bulk edit/delete/export wherever lists exist
I2Audit visibilityWho/when/what on records; change history visible, not buried
I3Keyboard + density efficiencyDense tables, keyboard nav, fast filters; optimize for repeat power use, not first-run hand-holding
I4Full error detailReal causes + IDs surfaced — internal users debug; don't over-soften

Shared surfaces (both audiences):

IDCheckConcretely
S1Role-gated affordancesInternal-only controls rendered only for internal roles — gate by permission check, never by CSS hiding or an unlinked route
S2Progressive disclosureClient-simple default view; power controls behind an explicit "advanced" affordance that internal roles see

Output artifacts

ArtifactLocationMode
Audience classification + posture guidancechat / design briefMode A / Mode-B-lite
Posture checklist ACs (C/I/S IDs cited)docs/specs/<slug>/spec.md via requirements-specificationMode B

Failure cases

FailureDetectionResponse
Artifact absent with no explicit operator requeststep 1silent no-op (correct)
Client surface over-complexstep 6flag; recommend simplification

Escalation path

  • Ambiguous audience → ask operator (FR-19).
  • Audience model needs updating → project-onboarding.

Anti-patterns

  • Do not activate when docs/audience.md is absent unless the operator explicitly requests the posture check and states the audience; never create the file from this skill.
  • Do not make client surfaces Salesforce-complex.
  • Do not strip necessary controls from internal surfaces for "simplicity".
  • Do not leave the classification chat-only when a spec is in flight — posture rows become ACs (step 5) or they evaporate.

Clean-room note

Original Fusebase Flow content. See docs/source-map.md. No third-party code, prompts, or skill files copied.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.