← 返回
未分类 Key 中文

Engineering manager 1-on-1 meeting brief generator

Generate a ready-to-use 1-on-1 brief for any engineer on your team — from their GitHub activity, in seconds. Spots patterns like high output but low review p...
从 GitHub 活动自动生成可直接使用的一对一简报,几秒完成。识别高产出但低审查参与等模式。
jacksync jacksync 来源
未分类 clawhub v1.0.2 2 版本 100000 Key: 需要
★ 0
Stars
📥 389
下载
💾 0
安装
2
版本
#latest

概述

Overview

PullStar fetches GitHub activity for one engineer (PRs authored, reviews given), runs a deterministic local scoring engine across five dimensions, and prepares an LLM input payload. The agent then performs LLM inference and finalizes the brief.

Quickstart:

run_brief.py --login steipete --pr-insights --days 7

Read llm_input_steipete.json, do the LLM inference, present the brief

Data Flow Summary:

StepWhat runsExternal calls
---------------------------------
Ingestrun_brief.pyingest.pyGitHub API
Scorerun_brief.pyscore.pyNone
Preparerun_brief.pyagent_prepare_1on1.pyNone
Agent inferenceAgent calls LLMLLM provider
FinalizeAgent runs agent_finalize_1on1.pyNone

⚠️ Important: Steps 1–3 run locally. Only the LLM inference step (step 4) sends data to your AI provider.


Requirements

  • Python 3.11+
  • Install dependencies: pip install PyGithub python-dotenv requests
  • A GitHub personal access token (see Security section below)

Security & Privacy

Token Scope

OptionWhere to createBest for
----------------------------------
Classic PAT (repo scope)https://github.com/settings/tokensCross-user search, org-wide ingestion
Fine-grained PAThttps://github.com/settings/personal-access-tokensYour own repos only

> Fine-grained PATs cannot search across arbitrary users. Use a classic PAT for org-wide briefs.

Set GITHUB_ORG to narrow search to one organization.

Token Resolution Order

Secrets are resolved using layered lookup — first match wins:

  1. --github-token CLI flag (override/debug only — never logged)
  2. GITHUB_TOKEN environment variable
  3. ~/.pullstar/credentials (key=value format)
  4. .env in the skill directory

Data Privacy by Mode

Default (no --pr-insights):

  • Only aggregated statistics and scores sent to LLM
  • No raw PR text, comments, or review bodies included

PR Insights (--pr-insights):

  • Bounded raw PR discussion text packaged into the LLM prompt
  • Bounded to 5 PRs, 3 reviews/comments each, 600 char limit per item
  • Review llm_input_{login}.json before inference if you have privacy concerns

Configuration

.env

VariableRequiredDescription
---------------------------------
GITHUB_TOKENRecommendedClassic PAT with repo scope. Omit for unauthenticated access (60 req/hr).
GITHUB_ORGNoScope ingestion to one org.

Usage

Standard run

python run_brief.py --login jsmith

With PR insights

python run_brief.py --login jsmith --pr-insights

Common options

python run_brief.py --login jsmith --days 14          # wider lookback (default: 5)
python run_brief.py --login jsmith --max-results 10   # faster on high-activity users (default: 20)
python run_brief.py --login jsmith --api-mode rest    # force REST API (default: graphql)

All options

FlagDefaultDescription
----------------------------
--loginrequiredEngineer GitHub login
--days5Lookback window in days
--pr-insightsoffInclude PR review/comment context in LLM prompt
--max-results20Max search results to iterate (lower = faster)
--api-modegraphqlgraphql or rest
--output-dir.pullstarDirectory for all artifacts
--github-tokenOverride/debug only. Prefer .env.

Agent Flow

run_brief.py runs the deterministic pipeline (ingest → score → prepare) and then prints an explicit instruction block. The agent must complete the final two steps:

============================================================
PIPELINE COMPLETE — AGENT ACTION REQUIRED
============================================================

  1. Read:   .pullstar/llm_input_jsmith.json
  2. Extract the "system" and "user" fields
  3. Call your LLM with those as the system prompt and user message
  4. Write the response to .pullstar/llm_output_jsmith.json
  5. Run:    python scripts/agent_finalize_1on1.py --login jsmith

Agent JSON Contract

Input (from run_brief.py)

File: .pullstar/llm_input_{login}.json

FieldTypeDescription
--------------------------
systemstringSystem prompt with instructions
userstringUser message with engineer data and scores
metadataobjectVersion, timestamps, total score, confidence

Output (from agent)

File: .pullstar/llm_output_{login}.json

{
  "version":        "1.0",
  "engineer_login": "jsmith",
  "brief":          "## Quick Summary\n..."
}

Requirements:

  • Valid JSON
  • brief must be a non-empty markdown string
  • Plain text is also accepted — the full file content will be used as the brief

Brief Output Format

The final brief (output_{login}.json) contains a markdown document with six sections:

SectionContent
------------------
Quick Summary2–3 sentences, lead with concrete numbers
Highlights2–4 bullets, one data point each
Areas to Explore2–3 open-ended questions for the 1-on-1
Patterns Worth Noting1–3 factual behavioral observations
Score SummaryMarkdown table — Dimension / Score / Confidence / Signal. Emoji encouraged in Confidence column.
Suggested FocusOne paragraph on the most useful 1-on-1 theme

Example Score Summary table:

DimensionScoreConfidenceSignal
--------------------------------------
Velocity16/20✅ High10 PRs merged, 3 active weeks
PR Quality14/20✅ HighAvg 320 lines, 2 large PRs flagged
Review Participation8/20⚠️ Medium3 reviews given in window
Collaboration12/20✅ High4 repos, 3 reviewers per PR avg
Consistency10/20🔴 Low1 of 3 weeks inactive

Artifacts

All artifacts are written to .pullstar/ (gitignored, never committed).

FileWritten bySent to AI?
-------------------------------
ingest_{login}.jsoningest.py❌ No
score_{login}.jsonscore.py❌ No
llm_input_{login}.jsonagent_prepare_1on1.py✅ Yes
llm_output_{login}.jsonAgent❌ No
output_{login}.jsonagent_finalize_1on1.py❌ No

Troubleshooting

"GitHub rejected the PR search query (422)"

Use a classic PAT — fine-grained PATs cannot search across arbitrary users.

"GitHub rate limit hit"

Authenticated: 5000 req/hr. Unauthenticated: 60 req/hr. Set GITHUB_TOKEN.

Slow ingestion on high-activity users

Use --max-results 10 to cap iteration. Default is 20.

GraphQL errors

Use --api-mode rest to fall back to the legacy REST API.


For Agent Developers

Subagent Best Practices (Don't Be a Nervous Parent)

When using sessions_spawn for the LLM inference step:

✅ Do:

  • Spawn once with the task to read llm_input_{login}.json and write llm_output_{login}.json
  • Trust the "auto-announces on completion" behavior — you'll get a completion event
  • Handle the result when the event arrives

❌ Don't:

  • Poll subagents list in a tight loop waiting for completion
  • Spawn multiple subagents for the same task
  • Check status every few seconds — it's wasteful

Why: Subagents are lightweight (no full OpenClaw context, isolated environment), but polling defeats the purpose of push-based completion. The system will tell you when it's done.

Recovery: If a subagent fails, you can always generate the brief directly in the main session — the JSON contract is simple and documented above.


License

MIT — See source repository for full license text.

版本历史

共 2 个版本

  • v1.0.2 当前
    2026-06-03 13:17
  • v1.0.1
    2026-05-08 02:19 安全

安全检测

腾讯云安全 (Keen)

队列中

腾讯云安全 (Sanbu)

队列中

🔗 相关推荐

business-ops

Salesforce

byungkyu
Salesforce CRM API 集成,支持托管 OAuth。仅在需要 Salesforce CRM 管理时安装。以最窄的 Salesforce 权限进行连接。
★ 8 📥 22,233
business-ops

Calendar

ndcccccc
日历管理与日程安排。创建事件、管理会议,并实现多日历平台同步。
★ 7 📥 23,253
business-ops

Trello

steipete
使用 Trello REST API 管理看板、列表和卡片
★ 162 📥 41,346