From well-skills
Compose everything Well knows about one named company — customer or vendor — into a single 360 view using Well's MCP financial graph: profile info, contact channels, and the invoice relationship (as issuer, receiver, or both). Use when the user asks "build a customer 360 view", "customer 360", "give me a 360 view of X", "everything about [company name]", "vendor across every rail", "who is this company", "show me our history with X", or "tell me about our relationship with [vendor/customer]". Requires a connected Well workspace with at least one connector that has synced company/invoice data; if none is connected or the company can't be found, this skill says so instead of guessing.
How this skill is triggered — by the user, by Claude, or both
Slash command
/well-skills:company-profileThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Answer "give me everything on this company" with one composed view from Well's synced financial graph: who they are, how to reach them, and the full money relationship with the workspace — whether that company is a customer, a vendor, or both. No spreadsheet-stitching, no guessing at a customer/vendor label that Well's schema doesn't have.
Answer "give me everything on this company" with one composed view from Well's synced financial graph: who they are, how to reach them, and the full money relationship with the workspace — whether that company is a customer, a vendor, or both. No spreadsheet-stitching, no guessing at a customer/vendor label that Well's schema doesn't have.
Use this skill when the user asks things like:
Do not use this skill when:
expense-breakdown instead.accounts-receivable-aging instead (this skill is about one company, not a portfolio ranking).runway-calculator instead.The user may provide:
companies id — required in some form; if neither is given, ask for a name.well_get_entity), and only page through the full history if asked or if the summary hits its row cap.Runs over Well's MCP server (https://api.wellapp.ai/v1/mcp, streamable HTTP). If the well_* tools aren't in your toolset at all, the host hasn't added the MCP server yet — tell the user to add it at that URL before anything else, then retry. Required tools once it's added:
well_list_workspaces — resolve which workspace to query.well_query_records — search companies by name, and page invoices/other roots past the entity-depth row cap.well_get_entity — read one companies row plus its direct sub-resources (contacts, invoice relations) at a configurable depth.well_get_schema — call this before querying any root for the first time in a session; field/relation names (especially the issuer/receiver invoice relations on companies) are workspace/connector-dependent, never assume them.well_list_connectors — surface install links when the workspace has no usable company/invoice data.authenticate tool, if the host exposes one) — if no Well MCP connection exists yet.Confirm the MCP server is configured. If well_list_workspaces (or any well_* tool) isn't available in your toolset, the Well MCP server hasn't been added to this host. Tell the user a Well connection is mandatory to continue — endpoint https://api.wellapp.ai/v1/mcp — because Well is where their financial data is aggregated securely to compute this profile; without it there's nothing to compose. Stop until it's there; don't estimate from assumptions.
Confirm the account. Call well_list_workspaces().
Verify the workspace has enough data. Query workspace_connectors for status: enabled entries, then spot-check well_query_records (1 row) on companies and invoices.
well_list_connectors(), present the top install links, and stop — there is nothing to compose a profile from yet.workspace_connector_sync_logs) is status: in_progress, tell the user data is still syncing and the profile may be partial.Resolve which company the user means. well_get_schema({ root: "companies" }) first. If the user gave an id, use it directly. If they gave a name, well_query_records on companies with a whereClause doing an _ilike match on name.
invoices/transactions by counterparty name instead.Compose the profile. Call well_get_entity({ root: "companies", id, depth: 2 }) to pull scalars (name, description, domain, locale, tax_id_value/tax_id_type, trade_name, registered_name, business_type, employee_count, founded_year), contact sub-resources (emails, phones, locations, web_links), and the direct invoice relation(s).
business_type is the legal entity form (Inc/LLC/GmbH), not an industry — there is no industry field on companies; never fabricate one.well_query_records on invoices filtered by a whereClause on that company's id as issuer or receiver.transactions — that relation only exists indirectly, via debtor_payment_means/creditor_payment_means on a transaction pointing to a PaymentMeans row that itself links to a Company/Person/Account. If the user wants transaction-level history for this company, treat it as a secondary, more-involved lookup: call well_get_schema({ root: "transactions" }) to find the current nested path before assuming one, and lead with the invoice relationship as the primary, reliable answer.Frame the relationship. Resolve workspaces.own_company on the current workspace (nullable — if unset, say the issuer/receiver framing can't be determined and report the raw invoice totals from both directions instead of labeling either side "customer" or "vendor"). Compare the resolved company's role in invoices against own_company: if the resolved company is the issuer and the workspace is the receiver, they're a vendor to us; if the reverse, they're a customer; if both directions have invoices, say so — this schema doesn't force a single label.
Normalize currency. If invoice totals span more than one local_currency, either convert to one base currency via exchange_rates and note the rate/date used, or report totals per currency — never blend currencies silently.
If any required step errors or returns unusable data, do not guess. The fallback is: (a) state the fallback question plainly in your reply (e.g. "give me a 360 view of [company]"), (b) answer it yourself using whatever partial Well MCP data you already have, clearly caveated, and (c) give the user a direct link to ask that question in Well (<well-app-base-url>/workspaces/<workspace_id>?q=give%20me%20a%20360%20view%20of%20...) so they can get a second opinion from their own AI assistant there.
Return:
business_type), employee count/founded year if present.own_company, or that framing wasn't possible because own_company is unset).Before finishing, verify:
well_* tools weren't available at all, the user was pointed at the MCP endpoint (https://api.wellapp.ai/v1/mcp) instead of erroring silently.well_get_schema was called before querying companies (and any other root) for the first time.industry field or customer/vendor boolean was fabricated — the relationship is framed only from issuer/receiver invoice data against own_company.well_get_entity's depth-2 child cap (50 rows) was hit and full history was needed, the fallback to paginated well_query_records was used, not a silently truncated total.debtor_payment_means/creditor_payment_means → PaymentMeans, with the invoice relation used as the primary answer."Give me a 360 view of Acme Corp — what's our whole relationship with them?"
Resolve the workspace, confirm connector data exists, find exactly one companies match for "Acme Corp", pull its profile and contacts at depth 2, resolve own_company to determine Acme is a vendor (they issue invoices to us), and present identity, contacts, and invoice totals (as issuer) with currency and as-of date.
"Tell me about our history with Meridian" (workspace has three companies with "Meridian" in the name)
Detect the multiple matches during step 4, list them with distinguishing details (domain, trade name), and ask the user which one they mean rather than picking one and risking the wrong company's data.
npx claudepluginhub wellapp-ai/skills --plugin well-skillsGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.
Dispatches multiple subagents concurrently for independent tasks without shared state. Use when facing 2+ unrelated failures or subsystems that can be investigated in parallel.