AgentStack
SKILL verified MIT Self-run

Freelance Pitch

skill-doctormozg-claude-pipelines-freelance-pitch · by DoctorMozg

ALWAYS invoke when the user wants to draft a freelance proposal for a single gig — by rank from /freelance-search, by URL, or picked from a list. Triggers: "freelance pitch", "draft proposal", "pitch this gig", "proposal for gig 3".

No reviews yet
0 installs
14 views
0.0% view→install

Install

$ agentstack add skill-doctormozg-claude-pipelines-freelance-pitch

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Freelance Pitch? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Freelance Pitch

Overview

You generate a single grounded freelance proposal for a selected gig. The gig may be referenced by rank (against the latest /freelance-search run), by URL (looked up in the latest run; if absent, WebFetched off-pipeline with a warning), or picked interactively from a list of the top-10 scored gigs.

The proposal is a markdown file at .mz/outreach//proposals/.md. Word cap: 350. Hard. Pricing and milestones must be grounded in verbatim text from the gig or the strategist's rate floor — no fabrication.

When to Use

Invoke when the user wants to draft a proposal for one specific freelance gig. Trigger phrases: "draft a proposal", "pitch this gig", "freelance pitch", "proposal for gig ", "proposal for ".

When NOT to use

  • The user wants to find gigs — use /freelance-search instead.
  • The user wants a salaried cover letter — use /job-search or the copywrite skill.
  • The user has no scored runs and no gig URL — the pipeline asks for a URL or aborts.

Input

  • $ARGUMENTS — optional, one of:
  • An integer rank (e.g. 3) → resolve against the latest /scored.json.
  • A URL → look up in the latest scored.json; if not found, WebFetch with a warning.
  • Empty → interactive picker.

Directory Structure

  • State.mz/task//state.md.
  • Output — when resolving against an existing freelance-search run: .mz/outreach//proposals/.md. When operating off-pipeline (URL with no prior run): .mz/outreach/_freelance_pitch_/proposals/.md.

Core Process

Phase Overview

| # | Phase | Agent(s) | Details | | --- | ----------------------------- | --------------------------------- | ----------------------------- | | 0 | Resolve gig (rank/URL/picker) | — (orchestrator, AskUserQuestion) | phases/resolve_and_pitch.md | | 1 | Read CV + gig + tone pick | — (orchestrator, AskUserQuestion) | phases/resolve_and_pitch.md | | 1.5 | Tone preference approval | — (orchestrator) | phases/resolve_and_pitch.md | | 2 | Generate proposal | freelance-proposal-writer | phases/resolve_and_pitch.md | | 3 | Proposal review + edit loop | — (orchestrator, AskUserQuestion) | phases/resolve_and_pitch.md | | 4 | Write final proposal file | — (orchestrator) | phases/resolve_and_pitch.md |

Read the phase file when reaching Phase 0.

Techniques

Delegated to phase file.

Common Rationalizations

N/A — orchestration skill.

Red Flags

  • You generated a proposal without a CV — proposal-writer cannot ground the credibility hook.
  • You allowed a milestone with no verbatim grounding from gig.project_scope_raw.
  • You let a pricing figure stand that does not trace to gig.budget_range_raw or strategy.rate_floor.
  • The final proposal contains any banned phrase from the proposal-writer's list.
  • The proposal exceeds 350 words.
  • You skipped the user approval gate at Phase 3.

Verification

Before completing, output a visible block showing: gig title, gig URL, source, output file path, word count, engagement type assumed, and a one-line excerpt of the opener. Confirm the proposal file exists on disk.

______________________________________________________________________

Phase 0 entry

Parse $ARGUMENTS:

  • Integer (e.g. 3) → rank_arg.
  • URL (starts with http:// or https://) → url_arg.
  • personality:off token (anywhere in $ARGUMENTS) → personality_mode = off (default on); disables the Phase 1.6 reader-style read so proposals use neutral structure.
  • Empty (no rank or URL) → interactive picker.

Discover the most recent freelance-search run:

latest_run=$(ls -dt .mz/outreach/*freelance_search_* 2>/dev/null | head -n 1)

Branching:

  • rank_arg set → require latest_run. If absent, AskUserQuestion: "No prior /freelance-search run found. Provide a gig URL, or Cancel."
  • url_arg set → if latest_run exists, look up the URL in latest_run/scored.json. If found, use the scored record. If not found, WebFetch the URL and treat as off-pipeline (warn: no prior scoring).
  • Empty → if latest_run exists, AskUserQuestion with a single-select menu of the top-10 scored gigs (label = # — (score )) plus an "Other URL" option. If no latest_run, AskUserQuestion demands a URL or aborts.

Set task_name = _freelance_pitch_. Set run_dir:

  • If gig came from latest_run's scored.json: run_dir = latest_run (proposals nested under existing run).
  • If gig is off-pipeline (URL with no prior scoring): run_dir = .mz/outreach/ (new sibling directory).
mkdir -p .mz/task/
mkdir -p /proposals

Read phases/resolve_and_pitch.md for the rest.

State Management

State persists to .mz/task//state.md. Schema is v2: the file's first line is schema_version: 2, and alongside the skill's existing Status / Phase / Started keys it carries phase_complete (boolean) and what_remains (YAML list of strings). Set phase_complete: false on phase entry and true once the phase's artifacts are written and its gates pass; refresh what_remains on every phase transition; what_remains MUST be [] when Status: complete. On reading a schema_version: 1 or unversioned file, add the missing keys, set schema_version: 2, and log the upgrade.

Error Handling

  • Off-pipeline WebFetch fails: AskUserQuestion to retry the URL or Cancel.
  • proposal-writer returns STATUS: BLOCKED (all milestones ungrounded): emit a chat block explaining the scope is too vague to produce a grounded proposal; offer to re-run with a different gig.
  • proposal-writer returns STATUS: DONE_WITH_CONCERNS: show concerns in the Phase 3 review gate so the user can accept or request a regenerate.

Resume Support

Phase 0 always re-resolves the gig (cheap). Phases 2-4 are not resumed — if interrupted, re-run /freelance-pitch with the same args.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.