manage-engagement-buffer
정보
이 스킬은 여러 플랫폼에서 들어오는 참여 항목(예: 알림 또는 메시지)에 대한 우선순위 큐를 관리하며, 수집, 속도 제한, 중복 제거 및 상태 추적을 처리합니다. 주기적인 요약을 생성하고 쿨다운 기간을 적용하며, 관찰/행동 주기를 제어하는 별도의 간격 스킬(`du-dum`)과 조합하여 작동합니다. 다중 소스에서 대량의 입력을 통제되고 질서 있는 방식으로 처리해야 하는 자율 에이전트를 구축할 때 사용하세요.
빠른 설치
Claude Code
추천npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/manage-engagement-bufferClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
管投入緩
收、排、限速、去重、追跨平台投入項之態。生期摘並執冷卻。與 du-dum 組:du-dum 設觀/動節,此技管拍間之列。
用
- 自主代理受逾週期可處之投入
- 重或近重項費動預算
- 投入須序於動鐘前
- 需冷卻以阻過投或限速
- 多平台源(GitHub、Slack、郵)饋單代理動環
入
- 必:
buffer_path— JSONL 緩文件路 - 可:
platform_config— 各平台限速與冷卻 - 可:
digest_size— 摘頂項數(默 5) - 可:
ttl_hours— 未動項之生壽(默 48) - 可:
cooldown_minutes— 動後線冷卻(默 60)
行
一:定緩模
設投入項結。緩中各項為單 JSON 行含此字段:
{
"id": "gh-notif-20260408-001",
"source": "github:pjt222/agent-almanac",
"timestamp": "2026-04-08T09:15:00Z",
"content_summary": "PR #218 review requested by contributor",
"priority": 4,
"state": "new",
"dedup_key": "github:pjt222/agent-almanac:pr-218:contributor-name",
"thread_id": "pr-218",
"ttl_hours": 48
}
字段定義:
| 字段 | 型 | 述 |
|---|---|---|
id | 串 | 獨識(源前綴+日+序) |
source | 串 | 平與道(github:repo、slack:channel、email:inbox) |
timestamp | ISO 8601 | 項收時 |
content_summary | 串 | 投入項之一行述 |
priority | int 1-5 | 合排(見步四) |
state | enum | new、acknowledged、acted、cooldown、merged、expired |
dedup_key | 串 | 合鍵:源+線+作者 |
thread_id | 串 | 話線識以追冷卻 |
ttl_hours | int | 未動過期時(默 48) |
存為 JSON Lines(各行一 JSON 象)。此格支僅追寫、行處、易按重寫除過期行而清。
得:於 buffer_path 初 JSONL 緩文件附模於伴註或頭。模穩足支諸下游步。
敗:緩文件不可造(權、路)→當週回內存列並記文系誤。勿默棄項——存於某處,即臨。
二:施收
受平適配器之項並加至緩附初排:
按項型之初排:
| 型 | 排 | 理 |
|---|---|---|
| 直提(@agent) | 5 | 有人明求注 |
| 審請 | 4 | 阻他人工 |
| 追線中之應 | 3 | 代理參之活話 |
| 通知(派、訂) | 2 | 信息,或需動 |
| 廣播(發、通) | 1 | 僅覺,少可動 |
各新項:
- 由模字段構項 JSON
- 按上表按型賦初排
- 置
state為new - 置
timestamp為當 UTC - 由源+線+作者生
dedup_key - 加 JSON 行至緩文件
# Pseudocode: ingest from GitHub adapter
for notification in github_adapter.fetch():
item = build_item(notification)
item.priority = priority_by_type(notification.reason)
item.state = "new"
append_jsonl(buffer_path, item)
log("ingested {item.id} priority={item.priority}")
得:新項現於緩附正排與 state=new。各適配器獨生合格項——適配器敗不阻他。
敗:平適配器敗(認過期、限速、網斷)→記敗並略此週之源。勿清現緩項——前成功取之陳項較空緩佳。
三:去重
掃緩於可配窗(默 24 時)內共 dedup_key 之項。保最高排並他標為合:
- 按
dedup_key組 - 各組按排降、時降排
- 保首(排最高、時最近);他標
state=merged - 察線潮:同
thread_id於 1 時內異作者示活動潮——合為單項附參者計加於content_summary
# Dedup logic
groups = group_by(buffer, "dedup_key", window_hours=24)
for key, items in groups:
if len(items) > 1:
keeper = max(items, key=lambda i: (i.priority, i.timestamp))
for item in items:
if item.id != keeper.id:
item.state = "merged"
# Thread burst detection
thread_groups = group_by(buffer, "thread_id", window_hours=1)
for thread_id, items in thread_groups:
active_items = [i for i in items if i.state == "new"]
if len(active_items) >= 3:
keeper = max(active_items, key=lambda i: i.priority)
keeper.content_summary += f" ({len(active_items)} participants)"
for item in active_items:
if item.id != keeper.id:
item.state = "merged"
得:緩無窗內重 dedup_key 項。線潮縮為單項附參者計。合項保於文件(審用)而除下游處外。
敗:去重生意外合(合法異項共鍵)→窄去重窗或精鍵構。加容散於去重鍵可辨共源+線+作者而容真異之項。
四:排序
按合分(含近衰與升級)重排緩:
合分式:
score = base_priority * recency_weight * escalation_factor
recency_weight = 0.9 ^ hours_since_ingestion
escalation_factor = 1.0 + (resubmission_count * 0.2)
# Cap effective priority at 5
effective_priority = min(5, score)
行為:
- 排 3 項收 0 時前:
3 * 1.0 * 1.0 = 3.0 - 排 3 項收 8 時前:
3 * 0.43 * 1.0 = 1.29(衰下於排 2 項) - 排 2 項二次重提:
2 * 1.0 * 1.4 = 2.8(升近排 3)
排諸 state=new 項按 effective_priority 降。此排序即摘(步六)呈予 du-dum 者。
得:緩按合分排。新高排項於頂。老項衰。重提項升。無項逾排 5。
敗:若分式生反直覺排(如 1 時前排 2 項排上於新排 3)→調衰率。0.95/時 較和;0.85/時 較激。調以匹投入節奏。
五:執限速與冷卻
以各平寫限與線冷卻阻代理過投:
平限速(由 platform_config 配):
| 平 | 默限 | 窗 |
|---|---|---|
| GitHub 評 | 1/20 秒 | 滾 |
| GitHub 審 | 3/時 | 滾 |
| Slack 訊 | 1/10 秒 | 滾 |
| 郵回 | 5/時 | 滾 |
線冷卻:代理動線後,該線入冷卻 cooldown_minutes(默 60)。冷卻中新項收而不於摘現。
誤退:受任平之 429/限速應→翻該平冷卻。成動後重設默。
# Rate limit check before action
def can_act(platform, thread_id):
if rate_limit_exceeded(platform):
return False, "rate limited"
if thread_in_cooldown(thread_id):
return False, "thread cooldown active"
return True, "clear"
# After action
def record_action(platform, thread_id):
increment_rate_counter(platform)
set_cooldown(thread_id, cooldown_minutes)
# After rate-limit error
def handle_rate_error(platform):
current_cooldown = get_platform_cooldown(platform)
set_platform_cooldown(platform, current_cooldown * 2)
得:代理永不逾平限速。線有執冷卻。限誤觸自退。緩冷卻中積項不失。
敗:即有執而限被觸(鐘偏、並代理)→加安全餘——設限為平實限之 80%。冷卻過激(失時敏線)→僅為高排線減 cooldown_minutes。
六:生摘
生 du-dum 動拍之緊要。摘乃交點:du-dum 讀之非原緩。
摘容:
- 總待:
state=new項計 - 頂 N 項:最高排項(默 N=5 由
digest_size) - 將期:於 TTL 之 20% 內項
- 冷卻中線:活冷卻附餘時
- 緩健:總項、合計、期計
# Engagement Digest — 2026-04-08T12:00:00Z
## Pending: 12 items
### Top 5 by Priority
| # | Priority | Source | Summary | Age |
|---|----------|--------|---------|-----|
| 1 | 5.0 | github:pr-218 | Review requested by contributor | 2h |
| 2 | 4.2 | github:issue-99 | Maintainer question (escalated) | 6h |
| 3 | 3.0 | slack:dev | Build failure alert | 1h |
| 4 | 2.8 | github:pr-215 | CI check feedback (3 participants) | 3h |
| 5 | 2.1 | email:inbox | Collaboration inquiry | 8h |
### Expiring Soon
- github:issue-85 — 4h remaining (TTL 48h, ingested 44h ago)
### Cooldowns Active
- pr-210: 22 min remaining
- issue-92: 45 min remaining
### Buffer Health
- Total items: 47 | New: 12 | Merged: 18 | Acted: 11 | Expired: 6
寫摘至已知路(如 buffer_path.digest.md)供 du-dum 動鐘讀。
得:摘 < 50 行,du-dum 一讀解。摘含決動何之信息,非全緩。無待→摘明言。
敗:摘 > 50 行→減 digest_size 或更激總期/冷卻節。摘乃總——若近緩之大→失目。
七:追態轉
du-dum 由摘處項後,更態並維審跡:
態機:
new → acknowledged → acted → cooldown → expired
↑ │
└───── (re-ingested) ───┘
merged → (終,無轉)
expired → (終,歸檔)
各態轉:
- 更緩文件中項
state字段 - 加轉日誌條:
{"item_id": "...", "from": "new", "to": "acknowledged", "timestamp": "...", "reason": "du-dum digest pickup"} - 動後設線冷卻(饋回步五)
保留與修剪:
state=acted或state=expired逾 7 日之項歸檔(可配)- 以移至別文件歸檔(
buffer_path.archive.jsonl),非刪 state=merged逾 24 時項修剪(已服去重目)- 各週終運修剪,於態更後
# End-of-cycle maintenance
for item in buffer:
if item.state == "new" and age_hours(item) > item.ttl_hours:
transition(item, "expired", reason="TTL exceeded")
if item.state in ("acted", "expired") and age_days(item) > retention_days:
archive(item)
if item.state == "merged" and age_hours(item) > 24:
archive(item)
rewrite_buffer(buffer_path, active_items_only)
得:各態轉記時戳與理。緩文件僅含活項(new、acknowledged、cooldown)。歸項別存供審。緩不無界長。
敗:緩文件重寫時壞(部寫、崩)→由重寫前備恢。必寫臨文件並原子改名——勿原地重寫。歸過大→月壓或輪。
驗
- 緩模含諸必字段(id、source、timestamp、content_summary、priority、state、dedup_key、thread_id、ttl_hours)
- 收按項型賦正初排
- 去重合窗內共 dedup_key 項
- 線潮察並合附參計
- 合分用近衰與升級,上限排 5
- 任寫動前執平限速
- 線冷卻阻冷卻窗內重投
- 摘緊(< 50 行)、含頂 N 項、有明空態
- 態轉記時戳供審
- 期與動項歸檔,非刪
- 緩文件跨週無界長
忌
- 項無 TTL:緩無界長;陳項排擠新。各項需 TTL,修剪步各週當運
- 忽線冷卻:同線連應於他參覺 spam。冷卻為社範非僅限速技
- 排無衰:老高排項無限阻新。近衰確緩反當前相關非歷要
- 去重窗過窄:1 時窗失隔時達之重(如通知後提醒)。始以 24 時僅於合項誤合時窄
- 緩邏輯耦於單平:始時為適配器式設。各平適配器生標緩項;緩本平無關
- 略摘步:du-dum 需總非原緩。傳全緩至動鐘失雙鐘架之目——動鐘當讀緊摘速決
參
du-dum— 此緩組之節式;du-dum 決何時觀動,此技決何值動manage-token-budget— 本算;緩設摘尺並限動吞吐時守令牌約circuit-breaker-pattern— 饋緩之平適配器敗處;適配器斷路開時收優雅降coordinate-reasoning— 緩與動系間之群痕信號;緩文件本為群痕物forage-resources— 察饋緩收適配器之新投入源
GitHub 저장소
연관 스킬
content-collections
메타이 스킬은 콘텐츠 콜렉션(Content Collections)을 위한 프로덕션 검증된 설정을 제공합니다. 콘텐츠 콜렉션은 Markdown/MDX 파일을 Zod 검증이 포함된 타입 안전한 데이터 콜렉션으로 변환해주는 TypeScript 최우선 도구입니다. 블로그, 문서 사이트 또는 콘텐츠 중심의 Vite + React 애플리케이션을 구축할 때 타입 안전성과 자동 콘텐츠 검증을 보장하기 위해 사용하세요. Vite 플러그인 구성과 MDX 컴파일부터 배포 최적화 및 스키마 검증에 이르기까지 모든 것을 다룹니다.
polymarket
메타이 스킬은 개발자들이 Polymarket 예측 시장 플랫폼을 활용한 애플리케이션을 구축할 수 있도록 지원하며, 거래 및 시장 데이터를 위한 API 통합 기능을 포함합니다. 또한 WebSocket을 통한 실시간 데이터 스트리밍을 제공하여 실시간 거래와 시장 활동을 모니터링할 수 있습니다. 이를 통해 거래 전략을 구현하거나 실시간 시장 업데이트를 처리하는 도구를 생성하는 데 활용할 수 있습니다.
creating-opencode-plugins
메타이 스킬은 개발자들이 명령어, 파일, LSP 작업 등 25개 이상의 이벤트 유형에 연결되는 OpenCode 플러그인을 만들 수 있도록 돕습니다. JavaScript/TypeScript 모듈을 위한 플러그인 구조, 이벤트 API 명세, 구현 패턴을 제공합니다. OpenCode AI 어시스턴트의 라이프사이클을 사용자 정의 이벤트 기반 로직으로 가로채거나, 모니터링하거나, 확장해야 할 때 사용하세요.
sglang
메타SGLang은 RadixAttention 프리픽스 캐싱을 활용하여 JSON, 정규식, 에이전트 워크플로우를 위한 고속 구조화 생성에 특화된 고성능 LLM 서빙 프레임워크입니다. 특히 반복되는 프리픽스가 있는 작업에서 상당히 빠른 추론 속도를 제공하여 복잡한 구조화 출력 및 다중 턴 대화에 이상적입니다. 제약 디코딩이 필요하거나 광범위한 프리픽스 공유가 있는 애플리케이션을 구축할 때는 vLLM과 같은 대안보다 SGLang을 선택하십시오.
