Marketing Foundation
Compact two-skill starter: clarify positioning and choose a lead magnet. Use Marketing Launch for the broader eight-skill go-to-market workflow.
The tunnel uses the same cards as the catalogue. Browse only as deep as needed — or load a broad bundle immediately.
SEO, Sales, Agents or another broad area → one bundle call → work.
Read-only access to published skills. Default 8, maximum 10 skills / 120,000 characters.
Compact two-skill starter: clarify positioning and choose a lead magnet. Use Marketing Launch for the broader eight-skill go-to-market workflow.
Build an evidence-led marketing plan from ICP and competition through positioning, campaigns, growth and measurement.
Diagnose architecture and context, plan agent-team responsibilities, then organize project context and session handoffs. Memory and cost-runtime reviews remain outside this pack.
Review the journey from landing page and lead capture through registration, first value and transparent upgrades.
Plan a campaign, draft its channel content and review the work against actual brand guidance.
Prioritize an editorial roadmap and plan how to launch and distribute it across suitable channels.
Understand customer needs, compare competitors and plan a community around real member value.
Choose a relevant lead magnet, then draft a permission-based nurture journey with entry, suppression and exit rules.
Define the API contract, then plan how to observe its latency, failures and retries. Guidance and checklist; no production changes.
Profile a dataset, choose and interpret statistical methods, then validate calculations and conclusions before sharing.
Define the target account, prioritize buying signals, plan a human LinkedIn engagement routine and prepare evidence-led responses to buyer concerns.
Assess creator suitability separately from campaign-specific commercial fit. Use Creator Record Governance for factual rates and rights history.
---
name: fit-scorer
slug: fit-scorer
displayName: "Fit Scorer · 红人适配评分"
summary: "用 typed STAR 适配度(S) 维度评估创作者,并将活动商业适配度作为独立矩阵排序"
description: 'Use when the user asks to "score this influencer", "rank these creators for our campaign", or "tell me which influencer is the best fit"; produces the typed STAR Suitability (S) read plus a separately labeled campaign-fit ranking without mixing campaign-specific commercial fit into the Suitability read. Not for finding new influencers — use influencer-discovery; not for sending outreach — use outreach-manager. 达人适配度评分/创作者筛选排名'
version: "20.1.0"
license: Apache-2.0
compatibility: "Claude Code and compatible agent-skill hosts"
homepage: "https://github.com/aaron-he-zhu/aaron-marketing-skills"
when_to_use: "Use when a user has a shortlist of influencers and needs an objective, weighted score to prioritize outreach, choose between candidates, justify a selection to stakeholders, set consistent evaluation standards, compare creators across niches or platforms, or build long-term partner tiers. Activates on requests like score @handle for our brand, compare and rank these creators, or which of these is the best fit."
argument-hint: "<brand or campaign> <influencer handle(s)> [campaign goal: awareness|engagement|conversion]"
metadata: {"author": "aaron-he-zhu", "version": "20.1.0", "discipline": "influencer", "phase": "scout", "geo-relevance": "low", "hermes": {"tags": ["marketing", "influencer", "scout"], "category": "influencer"}, "openclaw": {"emoji": "📣", "homepage": "https://github.com/aaron-he-zhu/aaron-marketing-skills"}}
---
# Fit Scorer
Score each shortlisted creator on the typed STAR **Suitability (S)** dimension, then keep deal-specific commercial fit in a separate prioritization matrix. Suitability includes the `STAR-S8` brand/category and audience-brand evidence that is independent of any single deal; deal terms, availability, and campaign orchestration stay outside it. The commercial matrix is not a Suitability score and never enters the SQS.
## Quick Start
Score one influencer:
```
Score @[handle] for [brand/campaign] and tell me if they're a good fit
```
Compare and rank a shortlist:
```
Compare and rank these influencers for [campaign]: @influencer1, @influencer2, @influencer3
```
## Skill Contract
- **Reads**: brand/campaign context, target audience definition, campaign goal, and shortlist entries carrying a stable opaque `creator_ref` plus either transient handles/profile URLs or resolvable opaque handle refs (supplied by the user or carried over from `influencer-discovery`). Optional prior audience profiles from `memory/influencer/audience-mapper/`, competitor partner benchmarks from `memory/influencer/competitor-tracker/`, and a WARM Campaign Retro Card's `evidence_refs` plus `next_campaign_hypothesis` when the user supplies or authorizes that handoff. For rostered creators, read partnership history and audience-stat provenance from `memory/creators/<aggregate-id>.md` — the [creator-registry](../../../protocol/creator-registry/SKILL.md) roster record — as Partnership Potential inputs.
- **Writes**: return the typed Suitability (S) read and separately labeled commercial-fit comparison inline by default; when a Retro Card is supplied, preserve its hypothesis as a separately labeled next-cycle test constraint with no score or verdict effect. Save the report to `memory/influencer/fit-scorer/YYYY-MM-DD-<topic>.md` only with exact WARM-save authorization. Saved reports and handoffs retain the stable opaque `creator_ref` and opaque evidence refs, never a raw handle, name, profile URL, email, provider ID, or deterministic hash in `creator_ref`.
- **Promotes**: only with separate exact authorization, promote evidence-backed top picks and their exact Suitability (S) read and catalog version to `memory/hot-cache.md`; never promote an unscored/provisional result or the Retro Card's qualitative decision/hypothesis as scored truth.
- **Done when**:
- Every creator has all 10 Suitability items `S1`–`S10` explicitly Pass/Partial/Fail/Unknown/N/A with dated evidence or a gap reason.
- Every creator's stable opaque `creator_ref` is preserved from discovery/registry or generated once for this lineage; raw identity locators remain transient.
- The typed goal/context and the Suitability item states are preserved for the gate; Unknown prevents a Suitability read.
- Any commercial-fit ranking is visibly separate from the Suitability read and cannot override a veto or missing evidence.
- If a Retro Card is supplied, its `next_campaign_hypothesis` is visible only as a falsifiable test constraint/commercial-matrix context; its `evidence_refs` are pointers for fresh investigation, not STAR item evidence or an automatic selection rule.
- **Primary next skill**: [campaign-planner](../../target/campaign-planner/SKILL.md) — turn the ranked shortlist into an approved campaign plan. If that plan is already approved and outreach-ready, hand off to [outreach-manager](../../activate/outreach-manager/SKILL.md) instead; competitor benchmarking is optional.
### Handoff Summary
> Emit the standard shape from [skill-contract.md §Handoff Summary Format](../../../references/skill-contract.md).
## Data Sources
This family needs no live integrations (Tier 1). Fit Scorer works end to end by asking the user for the inputs it scores — transient handles or profile locators, audience targets, brand values, and any metrics they have. A connector sharpens the numbers but none is required.
- `~~influencer database` — follower counts, audience demographics, and partnership history.
- `~~social platform analytics` — engagement rate, comment quality samples, posting cadence, growth trend.
- `~~audience intelligence` — real-vs-bot follower estimates and audience overlap with your target.
- **Roster record (keyless Tier 1)** — prior contact, response reputation, and delivery history come from `memory/creators/<aggregate-id>.md` when the creator is rostered ([creator-registry](../../../protocol/creator-registry/SKILL.md) curates it); `~~CRM` is an optional Tier-2 sharpener for the same history when no roster record exists.
**Measured YouTube inputs (free key)**: for YouTube candidates, `python3 "${CLAUDE_PLUGIN_ROOT}/scripts/connectors/youtube.py" videos @handle --limit 10` supplies the engagement-authenticity inputs directly — per-video views/likes/comments against the displayed subscriber base (views-to-subs consistency, comment rate, cadence) — so those sub-scores come from **Measured** numbers instead of screenshots. Free `YOUTUBE_API_KEY`; shortlist vetting only (ToS refuses bulk-harvesting quota). See [scripts/connectors/README.md](../../../scripts/connectors/README.md).
With zero integrations, ask the user to supply each value the scoring tables request; the framework and weighting still produce a defensible ranking. See [CONNECTORS.md](../../../CONNECTORS.md) for the free/keyless recipe per category.
## Instructions
The contract-compatible copied layouts live in [references/scoring-templates.md](references/scoring-templates.md): use the `creator_ref`-only typed `STAR-S1`–`STAR-S10` evidence table for the Suitability read, then the optional `commercial_fit_score` tables for separate decision support. Never copy a raw locator into those outputs.
1. **Lock identity and typed context.** Reuse the opaque `creator_ref` explicitly carried by discovery, or a creator-registry aggregate ID only when its handle link is verified. If the user supplies only a raw handle/profile URL and no verified aggregate exists, generate one random `creator-<UUIDv4>` and reuse it unchanged across this report, any authorized save, and downstream handoffs. Never set `creator_ref` to a raw handle, name, URL, email, provider ID, or deterministic hash of one; keep those locators transient for evidence acquisition. Resolve an opaque ref only through its accompanying authorized artifact or verified registry link. If neither is available, request the transient locator and preserve the identity as unresolved rather than guessing or merging. Then require the creator `target` and target version, named STAR profile/goal (`awareness|engagement|conversion|brand-building`), `assessment_time: forecast|actual`, shared campaign `rollup_id`, observation date, platform/tier/niche cohort, evidence window, material context object, and current STAR `catalog_version` — the exact typed identity the gate will reuse. If any field is absent, do not invent it: return `NEEDS_INPUT`, name the missing fields, and preserve the supplied identity unchanged for resume. When a Campaign Retro Card is supplied, record its `evidence_refs` and `next_campaign_hypothesis` in a separate non-scoring prior-cycle context block; neither becomes part of the STAR typed identity.
2. **Freeze evidence for the current window.** Use current creator analytics, public observations, roster history, and cohort benchmarks with source/date/type/confidence. A Retro Card and its `evidence_refs` are discovery pointers only, never STAR item evidence. If a referenced primary source is independently reacquired and qualifies in the current evidence window, cite that fresh observation rather than the card. Missing or refused private access is Unknown, never Fail or Partial.
3. **Score Suitability only.** Evaluate the Suitability items `S1`–`S10` (audience composition/realness, follower-growth integrity, reach reliability, engagement health and authenticity, credibility, and deal-independent brand/category fit) from [star-benchmark.md](../../../references/star-benchmark.md). Deal-specific commercial terms, availability, and orchestration conflicts stay in the separate matrix; cost and measured campaign conversion belong to Return (R), scored later by the gate.
4. **Qualify critical-control evidence for handoff.** `STAR-S2` covers demonstrated follower fraud / real-follower rate below the matching tier × platform × niche benchmark; `STAR-S6` covers demonstrated bought, coordinated, or pod-based engagement. Brand safety is the gate's Trust control `STAR-T3`, not a Suitability item. Mark an item Fail only from qualifying evidence, label it a potential gate finding, and operationally hold outreach while it stands. Do not call it a verified veto or apply the SQS cap/business verdict here; the auditor owns those decisions when it rolls up the full STAR run.
5. **Record the Suitability read for the gate.** Capture every `S1`–`S10` state as exactly Pass/Partial/Fail/Unknown/N/A with source/date/window/type/confidence or an explicit gap/N/A reason under the locked brand/category/cohort context. This typed table—not any 1–5 aid—is the Suitability read. The [creator-content-auditor](../../activate/creator-content-auditor/SKILL.md) gate folds it into the full STAR run and runs the deterministic scorer for the profile-weighted SQS; this skill does not run the scorer or emit the SQS. Unknown means applicable evidence is missing and prevents a complete Suitability read; never soften Unknown to Partial or hand-calculate a composite.
6. **Build the separate commercial matrix when requested.** Use deal-specific audience/goal nuance, content concept, brand conflicts, commercial terms, availability, and partnership potential. A supplied `next_campaign_hypothesis` may appear beside the matrix as a falsifiable test constraint, but contributes zero points and no weight. Label every 1–5 component and its rollup `commercial_fit_score`; never call one “Fit Score” or “Final Score.” It is not a Suitability score, cannot clear a Suitability control finding, and never enters the SQS.
7. **Rank transparently.** Show the typed Suitability read, critical controls, `commercial_fit_score` separately, evidence confidence, and an action tied to the declared rule with owner/rerun condition. Do not emit a generic Verdict or star rating. Route to `campaign-planner` by default; route to `outreach-manager` only when an approved campaign plan is already ready for execution. Offer competitor benchmarking as an optional check, not a mandatory detour. Do not rank an Unknown-heavy candidate as definitively superior, add/subtract points because a Retro hypothesis names a creator or tactic, or automatically select a candidate from a prior-cycle `renew | retest | retire | unknown` decision.
8. **Persist only with permission.** Save the report only after exact WARM authorization; request separate authorization before any hot-cache promotion. Persist and hand off `creator_ref` plus opaque handle/evidence refs, not the transient raw identity locator. The Retro hypothesis remains WARM working context. This skill does not propose provisional commercial rankings or non-gate Suitability results to `creator-registry`.
## Compact Example
**User**: "Compare @ecofashionista, @greenwardrobe, @sustainablesarah for our sustainable fashion brand (goal: conversion)."
**Output**: Each creator reuses an upstream opaque `creator_ref` or receives one random `creator-<UUIDv4>` before scoring; the raw handles remain transient lookup inputs. Each creator then receives `S1`–`S10` item states under the same campaign `rollup_id`; a Suitability (S) read exists only at complete applicable coverage, while the separate commercial matrix explains campaign-specific terms and availability. If a prior Retro Card is supplied, its hypothesis appears only as a zero-weight next-cycle test constraint and its sources are re-observed in the current window. A verified below-benchmark real-follower rate marks `STAR-S2` Fail and holds outreach; refused access stays Unknown and prevents the read. Only creator-content-auditor may apply the later STAR business verdict/cap. Persistence is offered, not assumed.
## Reference Materials
- [references/scoring-templates.md](references/scoring-templates.md) — typed Suitability evidence table plus separate `commercial_fit_score` component/rollup, comparison, custom-weighting, worked-example, and partial-state layouts.
- [skill-contract.md](../../../references/skill-contract.md) — shared contract and handoff summary format.
- [state-model.md](../../../references/state-model.md) — memory tiers and save-path conventions.
- [CONNECTORS.md](../../../CONNECTORS.md) — free/keyless data recipe per connector category.
- Scoring rubric: [star-benchmark.md](../../../references/star-benchmark.md) — the STAR framework, the Suitability (S) dimension this skill reads (incl. the `STAR-S2`/`STAR-S6` veto items), and the profile-weighted SQS the gate computes.
- Sibling skills: [influencer-discovery](../influencer-discovery/SKILL.md), [competitor-tracker](../../target/competitor-tracker/SKILL.md), [audience-mapper](../audience-mapper/SKILL.md), [outreach-manager](../../activate/outreach-manager/SKILL.md).
## Next Best Skill
**Primary**: [campaign-planner](../../target/campaign-planner/SKILL.md) — turn the ranked shortlist into the campaign plan, budget, timeline, and approval path.
**Conditional next step**:
- [outreach-manager](../../activate/outreach-manager/SKILL.md) — only when an approved campaign plan already defines the offer, budget, target creator, channel, and outreach approval path; this handoff does not authorize a send.
**Optional checks and alternates**:
- [competitor-tracker](../../target/competitor-tracker/SKILL.md) — optionally benchmark top picks against competitor partnerships when that evidence would change the selection.
- [creator-content-auditor](../../activate/creator-content-auditor/SKILL.md) — when a complete Suitability read or potential `STAR-S2`/`STAR-S6`/`STAR-T3` control evidence is ready, stop and hand it to this sole STAR gate as a separate invocation; do not auto-run or simulate its verdict.
- [influencer-discovery](../influencer-discovery/SKILL.md) — if the shortlist is too thin to rank, source more candidates.
- [audience-mapper](../audience-mapper/SKILL.md) — if audience-match scores are uncertain, tighten the target-audience definition first.
**Termination note**: Track a visited-set of skills invoked this session. If the recommended next skill has already run, stop and report the chain complete rather than re-invoking it. Stop after at most 3 hops (max-depth 3) and hand back the inline result plus any separately authorized save path.
## Related Skills
- [influencer-discovery](../influencer-discovery/SKILL.md) - Find influencers to score
- [competitor-tracker](../../target/competitor-tracker/SKILL.md) - Benchmark against competitor partners
- [audience-mapper](../audience-mapper/SKILL.md) - Define target audience
- [outreach-manager](../../activate/outreach-manager/SKILL.md) - Contact top-scored influencers
Assess creator suitability separately from campaign-specific commercial fit. Use Creator Record Governance for factual rates and rights history.
Complete original guidance with source attribution and declared limits.
Clarify scope and actual evidence; distinguish proposed plans from verified changes and preserve required human authorization.
Creator shortlist, campaign objectives, audience evidence and scoring criteria.
STAR and commercial-fit scores are source rubrics, not calibrated predictions. Keep suitability separate from contract or outreach authorization. Referenced registry scripts, schemas, connectors, benchmarks and sibling skills are not bundled or installed by M11. Brief obvious-danger screening only; no functional test or comprehensive safety certification. Original author: aaron-he-zhu.
Use Influencer Fit Assessment for [TASK]. Clarify Creator shortlist, campaign objectives, audience evidence and scoring criteria. Identify missing evidence and runtime dependencies. Do not claim execution, canonical state or human approval without actual evidence.
Claiming installed runtimes, automatic publishing/outreach or approved canonical records merely from loading source text.
German routing, task scope and runtime boundary. STAR and commercial-fit scores are source rubrics, not calibrated predictions. Keep suitability separate from contract or outreach authorization. Referenced registry scripts, schemas, connectors, benchmarks and sibling skills are not bundled or installed by M11. Brief obvious-danger screening only; no functional test or comprehensive safety certification. Original author: aaron-he-zhu.
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to the Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2024 Aaron He Zhu
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Copy the text below, then paste it into your chat.