Skip to content

feat(human-goat): add human-goat#1435

Open
mvanhorn wants to merge 11 commits into
mainfrom
feat/human-goat
Open

feat(human-goat): add human-goat#1435
mvanhorn wants to merge 11 commits into
mainfrom
feat/human-goat

Conversation

@mvanhorn

@mvanhorn mvanhorn commented Jul 4, 2026

Copy link
Copy Markdown
Owner

human-goat

Hire real humans from the terminal — autonomous TaskRabbit checkout with a verified undo, plus Magic remote errands, in one agent-native binary.

API: human-goat | Category: productivity | Press version: 4.27.1
Spec: Reverse-engineered (TaskRabbit cookie/tRPC + Magic REST); internal YAML spec

Publication Path

New print

CLI Shape

$ human-goat-pp-cli --help
Hire real humans from the terminal — autonomous TaskRabbit checkout with all-in pricing and a verified undo, plus Magic remote errands, in one agent-native binary.

Highlights (not in the official API docs):
  • hire   Say the job and the date; goat searches, ranks by review quality and honest all-in price, and checks out against the card on file with no prompt.
  • cancel   Cancels a booking and confirms it landed by re-reading status, reporting whether it was inside the free window and any fee.
  • hire   Refuses to check out when the computed all-in total exceeds a configurable ceiling, printing the total and the cap.
  • best   Folds TaskRabbit's hidden service (~15%) and trust-and-support (5-15%) fees into the displayed hourly rate, honoring the CA/MA service-fee-only rule.
  • dispatch   Routes a plain-language task to Magic (remote-doable) or TaskRabbit (in-person) by task shape, with a --via override.
  • spend   SQL over local booking, invoice, and Magic-task history by category, tasker, source, or month, using true effective all-in $/hr for TaskRabbit.
  • watch   Polls recommendations for a category and date (optionally a favorite or a rate ceiling) and alerts when a match opens.
  • status   One list of every in-flight task across TaskRabbit bookings and Magic requests, joined on the common task model and sorted by state.

Agent mode: add --agent to any command for JSON output + non-interactive mode.
Health check: run 'human-goat-pp-cli doctor' to verify auth and connectivity.
See README.md or the bundled SKILL.md for recipes.

Usage:
  human-goat-pp-cli [command]

Available Commands:
  account        Get the authenticated account profile
  agent-context  Emit structured JSON describing this CLI for agents
  api            Browse all API endpoints by interface name
  auth           Manage authentication for Human-Goat
  best           Folds TaskRabbit's hidden service (~15%) and trust-and-support (5-15%) fees into the displayed hourly rate
  call           Ask Magic to place a phone call and report back
  cancel         Cancels a booking and confirms it landed by re-reading status
  categories     List task templates for the account metro (title, category_name, category_id, default_template_id, top_category)
  completion     Generate the autocompletion script for the specified shell
  dispatch       Routes a plain-language task to Magic (remote-doable) or TaskRabbit (in-person) by task shape, with a --via override.
  doctor         Check CLI health
  feedback       Record feedback about this CLI (local by default; upstream opt-in)
  help           Help about any command
  hire           Say the job and the date; goat searches, ranks by review quality and honest all-in price
  invoices       Whether the account has submitted invoices (payment-history presence flag)
  learnings      Inspect or forget the local search_learnings table
  playbook       Inspect or amend stored CLI playbooks
  profile        Named sets of flags saved for reuse
  recall         Check prior learnings for a query before running discovery (LLM-fired, pre-discovery)
  reply          Reply to a Magic request conversation
  search         Search locally synced data
  send           Send a remote errand to Magic
  spend          SQL over local booking, invoice, and Magic-task history by category, tasker, source, or month
  status         One list of every in-flight task across TaskRabbit bookings and Magic requests
  sync           Sync API data to local SQLite for offline search and analysis
  tasks          List and inspect TaskRabbit bookings
  teach          Record a query -> resource mapping for future recall (LLM-fired, silent)
  teach-lookup   Install a manual entity-lookup row (kind, canonical, value)
  teach-pattern  Install a manual generalization pattern (query_template, resource_template, entity_kind)
  teach-playbook Record a CLI playbook + free-text notes for a query family
  track          Track a Magic request
  version        Print version
  watch          Polls recommendations for a category and date (optionally a favorite or a rate ceiling) and alerts when a match opens.
  which          Find the command that implements a capability
  workflow       Compound workflows that combine multiple API operations

Flags:
      --agent                Set all agent-friendly defaults (--json --compact --no-input --no-color --yes)
      --compact              Return only key fields (id, name, status, timestamps) for minimal token usage
      --config string        Config file path
      --csv                  Output as CSV (table and array responses)
      --data-source string   Data source for read commands: auto (live with local fallback), live (API only), local (synced data only) (default "auto")
      --deliver string       Route output to a sink: stdout (default), file:<path>, webhook:<url>
      --dry-run              Show request without sending
  -h, --help                 help for human-goat-pp-cli
      --home string          Root directory for config, data, state, and cache files
      --human-friendly       Enable colored output and rich formatting
      --json                 Output as JSON
      --max-age duration     Maximum acceptable age of local-store data before a stderr hint suggests sync; 0 disables (default 30m0s)
      --no-cache             Bypass response cache
      --no-color             Disable colored output
      --no-input             Disable all interactive prompts (for CI/agents)
      --no-learn             Disable the teach/recall learning loop for this invocation
      --plain                Output as plain tab-separated text
      --profile string       Apply values from a saved profile (see 'human-goat-pp-cli profile list')
      --quiet                Bare output, one value per line
      --rate-limit float     Max requests per second (0 to disable)
      --select string        Comma-separated fields to include in output (e.g. --select id,name,status)
      --timeout duration     Request timeout (default 1m0s)
  -v, --version              version for human-goat-pp-cli
      --yes                  Skip confirmation prompts (for agents and scripts)

Use "human-goat-pp-cli [command] --help" for more information about a command.

Novel Commands

Command Name Description
hire Autonomous soup-to-nuts hire Say the job and the date; goat searches, ranks by review quality and honest all-in price,
cancel Verified cancel (the safety gate) Cancels a booking and confirms it landed by re-reading status, reporting whether it was in
hire Spend cap Refuses to check out when the computed all-in total exceeds a configurable ceiling, printi
best All-in price Folds TaskRabbit's hidden service (~15%) and trust-and-support (5-15%) fees into the displ
dispatch Cross-source dispatch Routes a plain-language task to Magic (remote-doable) or TaskRabbit (in-person) by task sh
spend Cross-source spend analytics SQL over local booking, invoice, and Magic-task history by category, tasker, source, or mo
watch Availability watch Polls recommendations for a category and date (optionally a favorite or a rate ceiling) an
status Unified in-flight inbox One list of every in-flight task across TaskRabbit bookings and Magic requests, joined on

What This CLI Does

One binary, goat, that dispatches real-world tasks to real humans across two backends: TaskRabbit for in-person local labor (moving, assembly, mounting, cleaning) and Magic for remote errands (calls, lookups, bookings). The headline is autonomous soup-to-nuts hire on TaskRabbit — searched, ranked by honest all-in price and review quality, and checked out against the card on file — made safe by a spend cap and a cancel that verifies the cancellation landed. Cross-source dispatch/track/spend let you say what you want done and route to the right human network.

Manuscripts

Validation Results

Check Result
Manifest PASS
Phase 5 PASS
go mod tidy PASS
govulncheck (this CLI only) PASS
go vet PASS
go build PASS
--help PASS
--version PASS
Manuscripts PRESENT

Publish Live Gate

Full live dogfood reran at publish time and passed (120 tests, 0 failed) against the real TaskRabbit + Magic APIs. Side-effect commands (hire, send, call, reply) short-circuit under the dogfood env; the autonomous hire+cancel round-trip was separately proven live end-to-end (booked + cancelled + verified refundable).

Notes

  • One durable hand-edit recorded in .printing-press-patches/: pp:happy-args on the generated learning-loop commands (teach/teach-pattern/teach-playbook/playbook amend) so the live dogfood matrix can exercise them (generator/dogfood retro candidate).
  • hire's real checkout requires a geocoded --address-json (incl. TaskRabbit metro_id); --dry-run previews without it.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

@greptileai review

Auto-nudge from greptile-policy-gate.yml because no Greptile Review check appeared for 7faef9e35234348fc3ba9b8d35d2a4d1286b42f0 after 184s. This usually means the PR is over Greptile auto-review size cap; manual triggers bypass it.

@greptile-apps

greptile-apps Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds human-goat, a new productivity CLI that dispatches real-world tasks to TaskRabbit (in-person labor) and Magic (remote errands) from the terminal. It includes autonomous checkout with a spend cap, verified cancel, cross-source spend analytics, availability polling, and a unified status inbox.

  • Core novel commands (hire, cancel, best, spend, dispatch, watch, status) are all new; previous review comments on spend-cap integer truncation, CSRF fail-fast, and pagination caps have been addressed in this revision.
  • cancel now pages through all active bookings via listAllActiveBookings and returns early on CSRF failure; spend correctly applies pricing.AllIn() to poster_hourly_rate_cents via a dedicated fallback path when no explicit invoice total is present.
  • status exposes booking.ID (the top-level string \"id\" field) for TaskRabbit rows, while cancel requires the numeric details.id (JobID); these can be different API fields, breaking the agent workflow of listing status then cancelling by ID.

Confidence Score: 4/5

Safe to merge with one known coordination gap between the status and cancel commands that should be fixed to avoid agent workflow failures.

The status command's ID field for TaskRabbit rows comes from the top-level string "id" JSON field, while the cancel command requires the numeric details.id. When these differ in the API response, an agent that calls status to discover booking IDs and then passes one to cancel will get a "must be numeric" rejection. The rest of the novel commands — hire, cancel, spend, dispatch, watch, best — are well-implemented, and all three issues flagged in the previous review round have been correctly addressed.

library/productivity/human-goat/internal/cli/status.go — the TaskRabbit ID surfaced in the status row should be the numeric job_id rather than the string id to be compatible with cancel.

Important Files Changed

Filename Overview
library/productivity/human-goat/internal/cli/hire.go Autonomous soup-to-nuts TaskRabbit checkout: the previously flagged integer-truncation and hardcoded 2-hour estimate bugs are fixed; spend cap now uses float hours with math.Ceil; a new best-effort total-extraction function post-checkout could match a nested fee subtotal instead of the grand total.
library/productivity/human-goat/internal/cli/cancel.go Verified cancel with CSRF fast-fail and full pagination via listAllActiveBookings; all three previously flagged issues (CSRF continuation, single-page cap, and separate pages for lookup vs verify) are resolved.
library/productivity/human-goat/internal/cli/status.go Unified in-flight inbox across TaskRabbit and Magic; exposes booking.ID (string top-level "id") for TaskRabbit rows, which may not equal the numeric job_id that cancel requires — breaking the agent workflow of status → cancel.
library/productivity/human-goat/internal/cli/spend.go Cross-source spend analytics with proper all-in fee transformation for TaskRabbit rows via dedicated findPosterHourlyRateCents + pricing.AllIn() path; previously flagged issue with missing fee transformation is addressed.
library/productivity/human-goat/internal/cli/dispatch.go Keyword-based routing between Magic (remote) and TaskRabbit (in-person); TaskRabbit checkout correctly remains gated behind hire; Magic --execute path has proper error handling.
library/productivity/human-goat/internal/cli/watch.go Availability polling with deadline-aware context; --max-wait 0 gracefully does one poll and exits; pollDeadlineReached correctly distinguishes CLI deadline from user cancellation.
library/productivity/human-goat/internal/pricing/allin.go Clean all-in fee calculation with correct CA/MA service-fee-only carve-out; rates are labeled as observation-calibrated estimates, not authoritative.
library/productivity/human-goat/internal/source/taskrabbit/trpc.go tRPC/BFF adapter with correct envelope unwrapping, flex-typed unmarshalers for string-encoded numerics, and correct multi-field Booking parsing that shows ID vs JobID divergence used by status vs cancel.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant User
    participant CLI
    participant TaskRabbit
    participant Magic

    User->>CLI: hire "help moving" --on 2026-07-11
    CLI->>TaskRabbit: GET /metro_task_template (resolve category)
    CLI->>TaskRabbit: tRPC page.book.recommendations
    TaskRabbit-->>CLI: taskers + recommendation_id
    CLI->>TaskRabbit: tRPC page.book.schedule (invitee slots)
    TaskRabbit-->>CLI: availableDates[]
    CLI->>CLI: pricing.AllIn() → spend cap check
    CLI->>TaskRabbit: GET /dashboard (CSRF token)
    CLI->>TaskRabbit: POST /api/v3/jobs/post/hire.json
    TaskRabbit-->>CLI: hire response (job_id)
    CLI-->>User: booked result

    User->>CLI: cancel job_id
    CLI->>TaskRabbit: tRPC page.tasks.list (all pages)
    CLI->>TaskRabbit: GET /dashboard (CSRF token)
    CLI->>TaskRabbit: tRPC page.tasks.cancelTask
    CLI->>TaskRabbit: tRPC page.tasks.list (verify)
    CLI-->>User: cancelled + verified status

    User->>CLI: dispatch "call the dentist"
    CLI->>CLI: keyword routing → magic
    CLI->>Magic: POST /request (send)
    Magic-->>CLI: request_id
    CLI-->>User: routed + tracked
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant User
    participant CLI
    participant TaskRabbit
    participant Magic

    User->>CLI: hire "help moving" --on 2026-07-11
    CLI->>TaskRabbit: GET /metro_task_template (resolve category)
    CLI->>TaskRabbit: tRPC page.book.recommendations
    TaskRabbit-->>CLI: taskers + recommendation_id
    CLI->>TaskRabbit: tRPC page.book.schedule (invitee slots)
    TaskRabbit-->>CLI: availableDates[]
    CLI->>CLI: pricing.AllIn() → spend cap check
    CLI->>TaskRabbit: GET /dashboard (CSRF token)
    CLI->>TaskRabbit: POST /api/v3/jobs/post/hire.json
    TaskRabbit-->>CLI: hire response (job_id)
    CLI-->>User: booked result

    User->>CLI: cancel job_id
    CLI->>TaskRabbit: tRPC page.tasks.list (all pages)
    CLI->>TaskRabbit: GET /dashboard (CSRF token)
    CLI->>TaskRabbit: tRPC page.tasks.cancelTask
    CLI->>TaskRabbit: tRPC page.tasks.list (verify)
    CLI-->>User: cancelled + verified status

    User->>CLI: dispatch "call the dentist"
    CLI->>CLI: keyword routing → magic
    CLI->>Magic: POST /request (send)
    Magic-->>CLI: request_id
    CLI-->>User: routed + tracked
Loading

Reviews (11): Last reviewed commit: "docs(human-goat): expand patch record to..." | Re-trigger Greptile

Comment thread library/productivity/human-goat/internal/cli/hire.go
Comment thread library/productivity/human-goat/internal/cli/spend.go Outdated
Comment thread library/productivity/human-goat/internal/cli/cancel.go
Comment thread library/productivity/human-goat/internal/cli/cancel.go Outdated
… paginated+CSRF-guarded cancel, all-in spend totals
@mvanhorn

mvanhorn commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

Addressed all four findings in 459b49a:

  • hire.go (P1) — spend cap now estimates from the actual booked slot duration (floor 1h, 2h-minimum when the Tasker requires it) instead of a flat 2-hour guess, so in-budget bookings are no longer rejected.
  • spend.go (P1) — added spendAmountCentsForRow/findPosterHourlyRateCents: TaskRabbit rows now apply the all-in fee transform to poster_hourly_rate_cents rather than reporting 0/base.
  • cancel.go (P2) — fails fast on a missing CSRF token (returns the root cause instead of a downstream 403).
  • cancel.go (P2) — new listAllActiveBookings pages through all active bookings (capped) for both the pre-cancel lookup and the post-cancel verify, closing the >50-booking blind spot.

go build/vet/test all pass; one patch entry recorded under .printing-press-patches/.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

@greptileai review

Auto-nudge from greptile-policy-gate.yml because no Greptile Review check appeared for 459b49ab503a7cfee536e4b4dd220b8055a9d771 after 184s. This usually means the PR is over Greptile auto-review size cap; manual triggers bypass it.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

@greptileai review

Auto-nudge from greptile-policy-gate.yml because no Greptile Review check appeared for dc9516d7543f52d3f29a3ca7e2fa0a806671873b after 184s. This usually means the PR is over Greptile auto-review size cap; manual triggers bypass it.

…efers billed amounts and scales hourly estimate by booked duration
@mvanhorn

mvanhorn commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

Addressed the two Reviews (3) findings in 1c12c9a:

  • status.go--open now scopes the TaskRabbit listing to active bookings (status: active filter threaded into listAllBookings), not just the Magic side.
  • spend.gospendAmountCentsForRow now prefers an explicit billed/all-in amount first (so invoice rows' real totals are never shadowed by a rate estimate), and when it falls back to the hourly rate it multiplies by the booked duration (findBookingHours: duration_seconds/hours, 1h floor) so multi-hour bookings aren't counted at one hour.

go build/vet/test + full live dogfood (120/0) all pass.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

@greptileai review

Auto-nudge from greptile-policy-gate.yml because no Greptile Review check appeared for 1c12c9a57f1cd4257668ef64281fa32f156b611e after 183s. This usually means the PR is over Greptile auto-review size cap; manual triggers bypass it.

…irmation; bind watch poll context to --max-wait deadline
@mvanhorn

mvanhorn commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

Addressed the Reviews (4) finding (+ the watch note) in 81130bf:

  • hire.go — the booked confirmation now includes requested_date, the actual booked date, and slot_label; if firstTaskRabbitSlot fell back to a different day, it emits a loud note ("requested X was unavailable; booked Y instead"). An autonomous checkout can no longer silently book an unrequested date.
  • watch.go — the poll context is now bound to the --max-wait deadline (context.WithDeadline), so a hung API call inside the loop is cancelled at the deadline rather than only checked between polls.

go build/vet/test + full live dogfood (120/0) all pass.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

@greptileai review

Auto-nudge from greptile-policy-gate.yml because no Greptile Review check appeared for 81130bfdc30e2353968548d220448af57587251e after 183s. This usually means the PR is over Greptile auto-review size cap; manual triggers bypass it.

Comment thread library/productivity/human-goat/internal/cli/hire.go Outdated
…s aren't truncated; spend --state applies CA/MA carve-out
@mvanhorn

mvanhorn commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

Addressed the Reviews (5) findings in 9c64718:

  • hire.go (spend cap) — the slot-duration estimate now uses float hours and rounds up (math.Ceil(allInHourly * hours)), so a 1.5h slot is no longer truncated to 1h and the cap stays conservative.
  • spend.go — added a --state flag so the CA/MA service-fee-only carve-out is applied when estimating TaskRabbit all-in totals (was hardcoded to empty, overstating CA/MA spend ~17%).

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

@greptileai review

Auto-nudge from greptile-policy-gate.yml because no Greptile Review check appeared for 9c64718b6aa1491923c74740457d9b13c7e53662 after 185s. This usually means the PR is over Greptile auto-review size cap; manual triggers bypass it.

…'no opening' exit, still surfaces user cancel
@mvanhorn

mvanhorn commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

Addressed the Reviews (6) watch finding in e8c24ea (this was a regression from my earlier context-binding change): the poll loop now maps its own --max-wait deadline — whether it fires during an in-flight API call or during the inter-poll wait — to the clean no qualifying opening within <d> exit (exit 0), while a genuine cancel on the parent context (user Ctrl-C) is still surfaced as an error. pollDeadlineReached distinguishes the two. Full live dogfood 120/0.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

@greptileai review

Auto-nudge from greptile-policy-gate.yml because no Greptile Review check appeared for e8c24ea104b78aa952dd86e7104b74bc33abcba1 after 185s. This usually means the PR is over Greptile auto-review size cap; manual triggers bypass it.

@mvanhorn

mvanhorn commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

Addressed the Reviews (7) findings in 673ad27:

  • status.go (blocking) — removed the help-by-default guard; a bare status (no flags/args) now executes the unified in-flight list, its primary use case. --help still works via cobra.
  • hire.go (follow-up) — the dry-run/confirm summary now also emits the date-substitution warning (requested X was unavailable; would use Y instead) when firstTaskRabbitSlot falls back to another day, matching the booked-result warning, so no preview hides a date change before checkout.

Full live dogfood 120/0.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

@greptileai review

Auto-nudge from greptile-policy-gate.yml because no Greptile Review check appeared for 673ad276f81adc0f346c669cdafdd919b3c81376 after 185s. This usually means the PR is over Greptile auto-review size cap; manual triggers bypass it.

… availability; cancel reports refundability from the actual 24h window
@mvanhorn

mvanhorn commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

Addressed the Reviews (8) financial-correctness findings in e812137:

  • hire.go — the live checkout now aborts with an error when firstTaskRabbitSlot reports zero availability (it previously fabricated a 1-hour placeholder slot and proceeded to tr.Hire). Dry-run/preview still shows the no-availability note.
  • cancel.go — replaced the unconditional "deposit refundable" note with refundStatusNote, which parses the booking's appointment time and reports refundable (>=24h out), may-be-forfeited (within 24h), or neutral (unparseable) instead of over-promising.

Full live dogfood 120/0.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

@greptileai review

Auto-nudge from greptile-policy-gate.yml because no Greptile Review check appeared for e81213773d4b93bf570c73f86276d9990457382d after 184s. This usually means the PR is over Greptile auto-review size cap; manual triggers bypass it.

…abels estimate); status --open help clarifies TaskRabbit is active-only
@mvanhorn

mvanhorn commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

Addressed the two residual P2 gaps in 4b29a7e:

  • hire.go — the booked result now parses a confirmed charge from the hire response when TaskRabbit returns one (total_charged_cents/total_cents/etc.) and sets total_confirmed: true; when absent it keeps the estimate but sets total_confirmed: false and adds a note that all_in_total is a pre-checkout estimate. No longer presents an estimate as a settled charge.
  • status.go--open genuinely narrows the Magic side (in-progress only); TaskRabbit's task list is active-only by API design, so its rows are inherently in-flight. Updated the flag help to state this rather than implying a TaskRabbit filter that the API can't honor.

Full live dogfood 120/0.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

@greptileai review

Auto-nudge from greptile-policy-gate.yml because no Greptile Review check appeared for 4b29a7e38ff45ad93bb82f90210ab6f07c69102d after 184s. This usually means the PR is over Greptile auto-review size cap; manual triggers bypass it.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

@greptileai review

Auto-nudge from greptile-policy-gate.yml because no Greptile Review check appeared for c19b9d826fc9666f36d7c7daa3e7267305ea6688 after 186s. This usually means the PR is over Greptile auto-review size cap; manual triggers bypass it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant