BluetOpen source

What agents should know before contributing

PostHog/posthog

:hedgehog: PostHog is the leading platform for building self-driving products. Our developer tools – AI observability, analytics, session replay, flags, experiments, error tracking, logs, and more – capture all the context agents need to diagnose problems, uncover opportunities, and ship fixes. Steer it all from Slack, web, desktop, or the MCP.

Read by Bluet from 4 files written for agents and 300 merged pull requests on 2026-09-25. Not reviewed by the maintainers.

Rules its files tell agents (15)

  • mustNever use flox activate in interactive sessions (it hangs)
    .cursorrules
  • mustNever mention internal-only systems, private incidents, customer data, Slack thread contents, unreleased roadm…

    Never mention internal-only systems, private incidents, customer data, Slack thread contents, unreleased roadmap details, or security-sensitive implementation details. Slack thread links and channel references are fine to include — they sit behind PostHog auth and are useful as origin context — but do not quote or paraphrase what was said in the thread.

    CLAUDE.md
  • mustNever force-push a branch that is in the merge queue — it removes the PR from the queue.

    Never force-push a branch that is in the merge queue — it removes the PR from the queue. That includes restacking a stack whose base is queued.

    CLAUDE.md
  • mustNever gh stack merge — it lands the chain through GitHub's API, outside the queue.

    GitHub's native stacked PRs are enabled here. Use the gh stack CLI and /stacking-prs rather than hand-managing branch chains. Keep stacks shallow and merge the base before extending: restacking force-pushes every branch, and a deep stack pushed at once can exceed GitHub's dispatch cap and fail unrelated runs with it. Never gh stack merge — it lands the chain through GitHub's API, outside the queue.

    CLAUDE.md
  • mustNever run gh pr merge or click the GitHub merge button — both are blocked by branch ruleset.

    All merges into master go through the Trunk merge queue. Never run gh pr merge or click the GitHub merge button — both are blocked by branch ruleset.

    CLAUDE.md
  • mustNever bypass the pre-push hooks (--no-verify).

    Never bypass the pre-push hooks (--no-verify). They run hogli ci:preflight --strict and a merge-queue guard. When one blocks you, fix what it reports — /running-ci-preflight has the loop, /merging-prs explains the queue guard.

    CLAUDE.md
  • mustNEVER put sensitive information in a PR description or comment.

    Required: Read .github/pull_request_template.md and use its exact section structure. Do not invent a different format. Invoke /writing-pr-descriptions before writing the body — it carries the shape rules. Always fill the ## 🤖 Agent context section, including the exact model that wrote the code. NEVER put sensitive information in a PR description or comment. A user may share sensitive data in an agent session; none of it belongs on the PR.

    CLAUDE.md
  • mustNever use flox activate in interactive sessions (it hangs if you try)
    CLAUDE.md
  • shouldIf I ask for adjustments to code I have provided you, do not repeat all of my code unnecessarily.

    If I ask for adjustments to code I have provided you, do not repeat all of my code unnecessarily. Instead try to keep the answer brief by giving just a couple lines before/after any changes you make. Multiple code blocks are ok.

    .cursorrules
  • shouldif unsure, do not remove the comment.

    Please respect all code comments, they're usually there for a reason. Remove them ONLY if they're completely irrelevant after a code change. if unsure, do not remove the comment.

    .cursorrules
  • shouldDo not claim a provenance you have not checked.

    Do not claim a provenance you have not checked. "Written fresh" in a commit message is a factual claim a reviewer will rely on. If you are unsure, compare your text against the source: any shared run of ~40 characters or more means derived, not fresh.

    CLAUDE.md
  • shouldDO NOT GIVE ME HIGH LEVEL SHIT, IF I ASK FOR FIX OR EXPLANATION, I WANT ACTUAL CODE OR EXPLANATION!

    DO NOT GIVE ME HIGH LEVEL SHIT, IF I ASK FOR FIX OR EXPLANATION, I WANT ACTUAL CODE OR EXPLANATION! I DON'T WANT "Here's how you can blablabla"

    .cursorrules
  • shouldDo not infer that approval from requests to prepare a PR, move it toward merge, make it ready, monitor it, or…

    Agents must not enqueue, merge, re-enqueue, or otherwise cause a PR to land without explicit user approval in the current conversation for the identified PR or stack. Do not infer that approval from requests to prepare a PR, move it toward merge, make it ready, monitor it, or resolve its blockers. Agents may inspect status, fix code and CI, request a stamphog review when a required approval is missing (MCP first, label fallback, see /merging-prs), and report that a PR is ready — then wait for a direct instruction.

    CLAUDE.md
  • shouldDo not run it from cloud tasks or agent-server sandboxes; the command is a no-op there.

    Dev experience feedback: hogli devex:feedback "<message>" sends feedback about repo tooling — hogli, the dev stack, tests, CI, migrations, this setup — straight to the devex team as a hogli_feedback event (add -c bug|idea|praise|question). Local agents must use it too: when a hogli command or local dev workflow is broken, slow, or confusing, run it — e.g. hogli devex:feedback -c bug "migrations:run failed with <error>". Do not run it from cloud tasks or agent-server sandboxes; the command is a no-op there.

    CLAUDE.md
  • shouldExisting related docs, PR checklists, and general docs requirements do not authorize one.

    A new docs/** file requires a person to request that specific document in the current conversation. Existing related docs, PR checklists, and general docs requirements do not authorize one. Put PR-specific context in the PR description.

    CLAUDE.md

Decisions its pull requests settled (40)

  • #105091validate reference targets before a label activates a version
  • #105098read model prices from the generated catalog
  • #105114explain a timed-out sync instead of showing Temporal's wording
  • #105116keep the schedule on for an automatic widen re-sync
  • #105128refuse an event trigger that names no event when the flow would run
  • #105130load the support side panel on demand
  • #105139run cdc snapshots through the buffer
  • #105140point the dev trace spans MV at writable_trace_spans
  • #105154bound the notification feed history window
  • #105157purge expired ML key rows at most once a minute
  • #105231let read-only tokens see the alert-simulate MCP tool
  • #105289stop anchoring base-ui in the shared chunk
  • #105292enroll accounts on a person's role edit
  • #105310stop reviewhog fix commits on queued and stacked prs
  • #105311hold the pr follow-up loop while trunk tests the pr
  • #105317report the survivor count instead of blocking on it
  • #105351add repositories from an installation snapshot
  • #105396only let a client revoke tokens issued to it
  • #105407pluggable-memory golden for task boxes (bake + flag)
  • #105409report the real outcome when an AI detector check fails
  • #105434stream bing ads reports instead of holding them in memory
  • #105460add tombstone queue insert and read, list, ack RPCs
  • #105531serve stable chunk names behind an opt-in
  • #105551evict stale connections before async activities run
  • #105601give broadcasts its own page
  • #105623make team extension creation at team creation opt-in
  • #105640resolve the person tombstone queue in the deletion sweep
  • #105663retry idempotent api reads that lose the connection
  • #105670sort unordered insight list on an indexed column
  • #105682configure the enabled-scout cap per project
  • #105683read the inbox actionability cache instead of artefact json
  • #105687match warehouse row filters against the synced row
  • #105690honor 0 decimal places in data viz formatting
  • #105701read the 1M context and fast mode flags from the catalog
  • #105707finish support drafts that end without json
  • #105736stop key file field names blocking source setup
  • #105740stop the composer queue swallowing follow-ups
  • #105775give the model pickers one retirement list
  • #105784add a shared typesafe domain for jev
  • #105799size audiences during read-only impersonation
Your agents can be told this before they touch the code. Get it for your repository: npx bluet-mcp init. What Bluet is.
PostHog/posthog: what agents should know before contributing · Bluet