feat(skills): weekly-ingest / screenshot-ingest スキルを追加(非APIデータの週次取り込み基盤) - #1038
Conversation
API 非提供のサイト・アプリから Playwright で週次データ取り込み(口座残高等)を行い、 しきい値判定と Slack 通知まで実行するスキルを追加。 - .claude/skills/weekly-ingest.md: 実行フロー・失敗時対応・禁止事項・Routine 登録手順 - automation/: アダプタ定義(YAML)としきい値ルールの置き場 + テンプレート - AGENTS.md 自動生成セクションを再生成(block_managed_file_edit.py の登録漏れも補完) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011wuVC8ST1RbdrUd8iK4q3b
Web版がなくweekly-ingest(Playwright)で到達できないスマホ専用アプリの データを、Slackに投稿されたスクリーンショットから読み取って週次で取り込む screenshot-ingestスキルを追加。取り込み対象はautomation/screenshots/の YAMLで宣言的に管理し、しきい値ルールはweekly-ingestとrules.yamlを共用する。 - iOSスクリーンタイム定義(KPI2集中時間の入力データ、enabled) - 銀行残高定義のプレースホルダ(アプリ名確定後にenabled化) - ADR 0020に経路選定(ショートカット/スクショOCR/手入力)の経緯を記録 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011wuVC8ST1RbdrUd8iK4q3b
# Conflicts: # .claude/skills/README.md # AGENTS.md
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (4)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughAdds declarative schemas and examples for weekly and screenshot ingestion. Documents workflows, schedules, failure handling, and privacy controls. Adds an accepted ADR and handoff. Updates repository catalogs and shared shell output handling. ChangesIngest automation
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9d59c345fa
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| @@ -0,0 +1,56 @@ | |||
| --- | |||
| name: weekly-ingest | |||
There was a problem hiding this comment.
Include directory-form skills in the DevContainer image
When users consume the published config-base DevContainer image instead of this repository checkout, this skill is unavailable: .devcontainer/Dockerfile:154 copies only .claude/skills/*.md, while both new skills exist exclusively as <name>/SKILL.md directories. The image workflow is triggered by these additions but silently publishes an image without them, so copy the directory-form skills into the image as well.
Useful? React with 👍 / 👎.
| 6. **通知**: インボックスチャンネルへ返信する | ||
| - しきい値割れ: 即アラート(source・メトリクス・現在値・しきい値・メッセージ) | ||
| - 正常時: 全 source の週次サマリを 1 通にまとめて投稿。未提出の source があれば「未提出」として明記する | ||
| 7. **記録**: 実行結果スナップショットを `.context/screenshot-ingest/<date>.json` に保存する。定義に `notion_page` がある場合は、そのページの表に 1 行追記する |
There was a problem hiding this comment.
Persist weekly snapshots outside the ignored context tree
In worktree-based weekly Routine sessions, this does not create a durable record because .gitignore:98 ignores all .context/* output, and the enabled ios-screen-time definition has an empty notion_page, leaving no structured persistent destination. Consequently each session can disappear with its weekly KPI snapshot; store these results in a tracked path or require a durable external destination.
AGENTS.md reference: AGENTS.md:L7-L9
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Actionable comments posted: 8
🧹 Nitpick comments (1)
automation/README.md (1)
58-63: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winConstrain
conditionto a documented, non-evaluated grammar.Both skills are instructed to evaluate this free-form string. Define a small allowlist such as
operator + numeric threshold, reject other forms, and never pass repository configuration to a general expression evaluator. This keeps alerts deterministic and avoids executable configuration.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@automation/README.md` around lines 58 - 63, Update the documented condition format in the rules example and both skills to use a small allowlisted grammar, such as a comparison operator followed by a numeric threshold. Require validation and rejection of unsupported forms, and ensure repository configuration is parsed explicitly rather than passed to any general expression evaluator.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.claude/skills/screenshot-ingest/SKILL.md:
- Line 26: Treat an empty notion_page as disabled and only perform the Notion
append when it contains a valid non-empty destination in the screenshot-ingest
workflow. Document this convention in automation/README.md lines 49-50, and
apply the same disabled representation in automation/screenshots/_example.yaml
lines 10-11, bank-balance.yaml lines 8-9, and ios-screen-time.yaml lines 11-12;
update the skill instruction at .claude/skills/screenshot-ingest/SKILL.md line
26 accordingly.
In @.claude/skills/weekly-ingest/SKILL.md:
- Around line 32-33: Update the weekly-ingest failure-handling guidance for
page-transition and selector failures so raw screenshots are never saved under
`.context/weekly-ingest/`; require redaction before persistence, or store
redacted artifacts outside the repository with short retention, or omit them.
- Around line 30-35: Update the weekly-ingest retry flow to track whether
credential submission has occurred and prohibit all retries afterward, including
selector or page-transition failures on the login page. Allow retries only
during pre-authentication navigation, and abort or escalate immediately once
credentials are submitted, preserving the existing screenshot and Slack
notification behavior.
- Line 19: Align the TOTP reference contract across all three sites: in
.claude/skills/weekly-ingest/SKILL.md at lines 19-19, resolve TOTP only from a
non-empty auth.totp_secret reference rather than auth.secret; in
automation/README.md at lines 21-23, document that auth.secret resolves
<secret>_USER and <secret>_PASS while auth.totp_secret is a separate optional
reference; in automation/adapters/_example.yaml at lines 6-8, remove the TOTP
placeholder when it is not required.
In `@automation/README.md`:
- Around line 28-31: Replace unrestricted natural-language automation steps with
a structured, validated read-only operation allowlist or fail-closed
validation/confirmation gate in automation/README.md lines 28-31. Update
.claude/skills/weekly-ingest/SKILL.md lines 20 and 39-42 so execution uses only
validated read operations and the existing transfer, purchase, and
settings-change prohibitions are enforced rather than merely documented.
In `@automation/screenshots/ios-screen-time.yaml`:
- Around line 5-10: Align the screen-time metric definitions in
daily_avg_screen_time and top_category_time with the weekly totals shown by the
screenshot: either rename and convert both metrics to weekly minutes, or
explicitly define and apply a daily-average conversion before threshold
comparisons. Ensure names, descriptions, units, and threshold logic consistently
represent the same time bucket.
In `@docs/adr/0021-screenshot-based-mobile-data-ingest.md`:
- Around line 47-48: Update the Japanese claim in the ADR to state that users
submit one screenshot per enabled app per week, rather than one screenshot post
total per week; preserve the surrounding KPI data-ingest description.
In `@script/lib/agents-md-data.sh`:
- Line 28: Update the automation description in the agents metadata source to
mention both weekly-ingest and screenshot-ingest workflows, including their
shared processing rules, then regenerate the repository’s AGENTS.md from this
source so the catalog reflects the expanded automation contents.
---
Nitpick comments:
In `@automation/README.md`:
- Around line 58-63: Update the documented condition format in the rules example
and both skills to use a small allowlisted grammar, such as a comparison
operator followed by a numeric threshold. Require validation and rejection of
unsupported forms, and ensure repository configuration is parsed explicitly
rather than passed to any general expression evaluator.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 01181615-933e-4aee-95c8-2b3ce01e33ef
📒 Files selected for processing (13)
.claude/skills/README.md.claude/skills/screenshot-ingest/SKILL.md.claude/skills/weekly-ingest/SKILL.mdAGENTS.mdautomation/README.mdautomation/adapters/_example.yamlautomation/rules.yamlautomation/screenshots/_example.yamlautomation/screenshots/bank-balance.yamlautomation/screenshots/ios-screen-time.yamldocs/adr/0021-screenshot-based-mobile-data-ingest.mddocs/adr/README.mdscript/lib/agents-md-data.sh
| 6. **通知**: インボックスチャンネルへ返信する | ||
| - しきい値割れ: 即アラート(source・メトリクス・現在値・しきい値・メッセージ) | ||
| - 正常時: 全 source の週次サマリを 1 通にまとめて投稿。未提出の source があれば「未提出」として明記する | ||
| 7. **記録**: 実行結果スナップショットを `.context/screenshot-ingest/<date>.json` に保存する。定義に `notion_page` がある場合は、そのページの表に 1 行追記する |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Treat empty notion_page as disabled.
The schema calls this field optional, but the definitions set it to '' while the skill appends whenever the key exists. The enabled iOS definition can therefore attempt an invalid Notion write.
.claude/skills/screenshot-ingest/SKILL.md#L26-L26: require a non-empty, valid destination before calling Notion.automation/README.md#L49-L50: document whether empty string means disabled, or omit the field.automation/screenshots/_example.yaml#L10-L11: use the same disabled representation.automation/screenshots/bank-balance.yaml#L8-L9: apply the disabled representation.automation/screenshots/ios-screen-time.yaml#L11-L12: apply the disabled representation.
🧰 Tools
🪛 SkillSpector (2.4.4)
[warning] 30: [MP2] Context Window Stuffing: Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
Remediation: Implement context-window management that detects and rejects padding or stuffing attempts. Prioritize system instructions over user-injected content.
(Memory Poisoning (MP2))
📍 Affects 5 files
.claude/skills/screenshot-ingest/SKILL.md#L26-L26(this comment)automation/README.md#L49-L50automation/screenshots/_example.yaml#L10-L11automation/screenshots/bank-balance.yaml#L8-L9automation/screenshots/ios-screen-time.yaml#L11-L12
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.claude/skills/screenshot-ingest/SKILL.md at line 26, Treat an empty
notion_page as disabled and only perform the Notion append when it contains a
valid non-empty destination in the screenshot-ingest workflow. Document this
convention in automation/README.md lines 49-50, and apply the same disabled
representation in automation/screenshots/_example.yaml lines 10-11,
bank-balance.yaml lines 8-9, and ios-screen-time.yaml lines 11-12; update the
skill instruction at .claude/skills/screenshot-ingest/SKILL.md line 26
accordingly.
| ## 実行フロー | ||
|
|
||
| 1. **アダプタ読み込み**: `automation/adapters/*.yaml` を列挙し、`enabled: true` のものだけを対象にする | ||
| 2. **認証情報解決**: `auth.secret` に指定されたシークレット名から ID / パスワード(必要なら TOTP シークレット)を取得 |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Align the TOTP reference contract.
The README defines auth.secret as a prefix for <secret>_USER/<secret>_PASS and auth.totp_secret as a separate optional reference, but weekly-ingest says to obtain TOTP from auth.secret. The template also always includes a TOTP placeholder. Resolve TOTP only when a non-empty auth.totp_secret is present, and omit it from the template when unused.
.claude/skills/weekly-ingest/SKILL.md#L19-L19: resolve the separateauth.totp_secretreference.automation/README.md#L21-L23: document the exact resolution contract.automation/adapters/_example.yaml#L6-L8: omit the optional TOTP field unless required.
🧰 Tools
🪛 SkillSpector (2.4.4)
[warning] 30: [MP2] Context Window Stuffing: Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
Remediation: Implement context-window management that detects and rejects padding or stuffing attempts. Prioritize system instructions over user-injected content.
(Memory Poisoning (MP2))
📍 Affects 3 files
.claude/skills/weekly-ingest/SKILL.md#L19-L19(this comment)automation/README.md#L21-L23automation/adapters/_example.yaml#L6-L8
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.claude/skills/weekly-ingest/SKILL.md at line 19, Align the TOTP reference
contract across all three sites: in .claude/skills/weekly-ingest/SKILL.md at
lines 19-19, resolve TOTP only from a non-empty auth.totp_secret reference
rather than auth.secret; in automation/README.md at lines 21-23, document that
auth.secret resolves <secret>_USER and <secret>_PASS while auth.totp_secret is a
separate optional reference; in automation/adapters/_example.yaml at lines 6-8,
remove the TOTP placeholder when it is not required.
| | 状況 | 対応 | | ||
| | ------------------------ | -------------------------------------------------------------------------- | | ||
| | ページ遷移・セレクタ失敗 | スクリーンショットを `.context/weekly-ingest/` に保存し、最大 2 回リトライ | | ||
| | ログイン失敗 | **リトライ禁止**(アカウントロック防止)。Slack で手動確認を依頼 | | ||
| | レイアウト変更を検知 | アダプタの修正案を提示、または Issue を起票 | | ||
| | CAPTCHA / 追加認証 | 自動回避を試みず、Slack に通知して該当サイトをスキップ | |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
Make retries impossible after credential submission.
Selector or page-transition failures can occur on the login page after credentials are submitted, which overlaps the “login failure: no retry” rule and can cause repeated attempts or account lockout. Gate retries to pre-auth navigation or abort once credentials have been submitted.
🧰 Tools
🪛 SkillSpector (2.4.4)
[warning] 30: [MP2] Context Window Stuffing: Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
Remediation: Implement context-window management that detects and rejects padding or stuffing attempts. Prioritize system instructions over user-injected content.
(Memory Poisoning (MP2))
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.claude/skills/weekly-ingest/SKILL.md around lines 30 - 35, Update the
weekly-ingest retry flow to track whether credential submission has occurred and
prohibit all retries afterward, including selector or page-transition failures
on the login page. Allow retries only during pre-authentication navigation, and
abort or escalate immediately once credentials are submitted, preserving the
existing screenshot and Slack notification behavior.
| | ページ遷移・セレクタ失敗 | スクリーンショットを `.context/weekly-ingest/` に保存し、最大 2 回リトライ | | ||
| | ログイン失敗 | **リトライ禁止**(アカウントロック防止)。Slack で手動確認を依頼 | |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Do not persist raw failure screenshots under .context.
A failed bank-page screenshot can contain balances, account numbers, names, or other PII. Redact before saving, store it outside the repository with short retention, or omit the artifact entirely.
🧰 Tools
🪛 SkillSpector (2.4.4)
[warning] 30: [MP2] Context Window Stuffing: Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
Remediation: Implement context-window management that detects and rejects padding or stuffing attempts. Prioritize system instructions over user-injected content.
(Memory Poisoning (MP2))
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.claude/skills/weekly-ingest/SKILL.md around lines 32 - 33, Update the
weekly-ingest failure-handling guidance for page-transition and selector
failures so raw screenshots are never saved under `.context/weekly-ingest/`;
require redaction before persistence, or store redacted artifacts outside the
repository with short retention, or omit them.
| steps: # ログイン〜取得までの手順(自然言語。Playwright 実行時の指示になる) | ||
| - ログインページを開く | ||
| - ユーザー ID とパスワードを入力してログインする | ||
| - ホーム画面に表示される「普通預金残高」を取得する |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift
Enforce the read-only boundary instead of relying on prose in free-form steps.
steps is arbitrary natural language passed directly as Playwright execution instructions. The prohibition does not prevent a configured step from submitting a transfer, purchase, or settings change. Use a structured allowlist of read actions or a fail-closed validation/confirmation gate.
automation/README.md#L28-L31: replace unrestricted natural-language steps with validated read-only operations..claude/skills/weekly-ingest/SKILL.md#L20-L20: execute only validated read operations..claude/skills/weekly-ingest/SKILL.md#L39-L42: retain these prohibitions as enforcement rules, not documentation only.
📍 Affects 2 files
automation/README.md#L28-L31(this comment).claude/skills/weekly-ingest/SKILL.md#L20-L20.claude/skills/weekly-ingest/SKILL.md#L39-L42
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@automation/README.md` around lines 28 - 31, Replace unrestricted
natural-language automation steps with a structured, validated read-only
operation allowlist or fail-closed validation/confirmation gate in
automation/README.md lines 28-31. Update .claude/skills/weekly-ingest/SKILL.md
lines 20 and 39-42 so execution uses only validated read operations and the
existing transfer, purchase, and settings-change prohibitions are enforced
rather than merely documented.
| - name: daily_avg_screen_time | ||
| unit: minutes | ||
| description: 1日あたりの平均スクリーンタイム(週表示の「1日平均」) | ||
| - name: top_category_time | ||
| unit: minutes | ||
| description: 最も使用時間の長いカテゴリの1日平均時間(SNS など浪費時間の代理指標) |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Files of interest:"
fd -a 'ios-screen-time\.yaml$|.*screen.*time.*\.(yaml|yaql|json|jsonl|js|ts)$' . 2>/dev/null | sed 's#^\./##' | head -200
echo
echo "Relevant file:"
if [ -f automation/screenshots/ios-screen-time.yaml ]; then
cat -n automation/screenshots/ios-screen-time.yaml
else
echo "missing automation/screenshots/ios-screen-time.yaml"
fi
echo
echo "Search metric names and units:"
rg -n "daily_avg_screen_time|top_category_time|unit: minutes|hours|minutes|ScreenTime|screen time|screen_time" automation . --glob '!*node_modules*' --glob '!*dist*' --glob '!*build*' | head -300Repository: keito4/config
Length of output: 3389
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Repository files (top-level):"
git ls-files | sed 's#^\./##' | awk -F/ '{print $1}' | sort -u
echo
echo "Automation files:"
git ls-files automation | sed 's#^\./##' | head -300
echo
echo "Screenshots automation files:"
git ls-files automation/screenshots automation 2>/dev/null | sed 's#^\./##' | rg '(^automation/screenshots/|scripts|bin|lib|src|package|README|\.ya?ml$|\.ya?ql$|\.jsonl?$|\.js$|\.ts$|\.py$)' | head -300
echo
echo "Search automation screenshot readers/parsers (excluding tests):"
rg -n "ios|screenshot|screen.time|metrics|unit:|capture_hint|source:" automation --glob '!*test*' --glob '!*tests*' || trueRepository: keito4/config
Length of output: 3183
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "automation/screenshots/_example.yaml:"
cat -n automation/screenshots/_example.yaml
echo
echo "automation/README.md relevant sections:"
sed -n '1,100p' automation/README.md | cat -n
echo
echo "automation/rules.yaml:"
cat -n automation/rules.yaml
echo
echo "automation/adapters/_example.yaml:"
cat -n automation/adapters/_example.yaml
echo
echo "Search all occurrences of screenshot-ingest and screenshot yaml schema terms:"
rg -n "screenshot-ingest|screenshots/|capture_hint|metrics:|unit:|source:" . --glob '!node_modules/**' --glob '!dist/**' --glob '!build/**' | head -300Repository: keito4/config
Length of output: 9465
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Skills-related files:"
fd . .claude 2>/dev/null | sed 's#^\./##' | rg 'screenshot|weekly|ingest|skill' | head -200 || true
echo
echo "docs/adr/0021-screenshot-based-mobile-data-ingest.md:"
sed -n '1,220p' docs/adr/0021-screenshot-based-mobile-data-ingest.md | cat -n
echo
echo "AGENTS.md screenshot-ingest section:"
sed -n '100,150p' AGENTS.md | cat -n
echo
echo "Search prompt/skill implementations for screenshots ingestion and unit handling:"
rg -n "screenshots|screenshot-ingest|weekly-ingest|capture_hint|metrics|unit|minute|minutes|hour|hours|convert|normalize|threshold|rule" .claude docs automation . --glob '!node_modules/**' --glob '!*build/**' --glob '!*dist/**' | head -400Repository: keito4/config
Length of output: 45623
Make the screen-time metrics match what the screenshot actually reports.
The weekly screenshot says “週表示” and the fields claim “1日平均”. If the image only shows weekly totals for the app/category breakdown, either convert top_category_time/daily_avg_screen_time to weekly minutes and name them consistently, or add an explicit daily-average conversion rule so thresholds compare the same time bucket.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@automation/screenshots/ios-screen-time.yaml` around lines 5 - 10, Align the
screen-time metric definitions in daily_avg_screen_time and top_category_time
with the weekly totals shown by the screenshot: either rename and convert both
metrics to weekly minutes, or explicitly define and apply a daily-average
conversion before threshold comparisons. Ensure names, descriptions, units, and
threshold logic consistently represent the same time bucket.
| - Web 版のないアプリでも、ユーザーの手間をスクショ投稿 1 回/週に抑えて | ||
| KPI 入力データを取り込める。 |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Correct the “one screenshot per week” claim.
The skill requests one screenshot for each enabled app, so this is one post per app per week, not one post total when multiple definitions are enabled.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/adr/0021-screenshot-based-mobile-data-ingest.md` around lines 47 - 48,
Update the Japanese claim in the ADR to state that users submit one screenshot
per enabled app per week, rather than one screenshot post total per week;
preserve the surrounding KPI data-ingest description.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011wuVC8ST1RbdrUd8iK4q3b
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.context/handoff/2026-07-30-kpi-screenshot-ingest.md:
- Around line 12-18: Update the handoff document’s references from ADR 0020 to
ADR 0021 and from `.claude/skills/screenshot-ingest.md` to
`.claude/skills/screenshot-ingest/SKILL.md`. Revise the status at line 26 to
reflect that the PR has been created once this change is submitted, while
preserving the surrounding handoff details.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: f7a4961b-2221-4257-a0d0-3ab019818dc1
📒 Files selected for processing (1)
.context/handoff/2026-07-30-kpi-screenshot-ingest.md
| 2. スマホ専用データ(Web 版がないアプリ)の取り込み経路としてスクショ→OCR | ||
| (経路 B)を採用し、`screenshot-ingest` スキルを構築した(ADR 0020)。 | ||
|
|
||
| ## 完了済み | ||
|
|
||
| - `.claude/skills/screenshot-ingest.md` / `automation/screenshots/*.yaml` / | ||
| ADR 0020 / AGENTS.md 更新(コミット b8deb6c、プッシュ済み) |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift
引き継ぎ書の参照先と状態を現行構成に更新してください。
Line 13 and Lines 17-18 still reference ADR 0020 and .claude/skills/screenshot-ingest.md, but the current contract uses ADR 0021 and .claude/skills/screenshot-ingest/SKILL.md. Line 26 also says the PR has not been created, which becomes stale once this change is submitted. Update these references before merge so the next session follows the correct documentation and status.
修正例
- (経路 B)を採用し、`screenshot-ingest` スキルを構築した(ADR 0020)。
+ (経路 B)を採用し、`screenshot-ingest` スキルを構築した(ADR 0021)。
...
-- `.claude/skills/screenshot-ingest.md` / `automation/screenshots/*.yaml` /
- ADR 0020 / AGENTS.md 更新(コミット b8deb6c、プッシュ済み)
+- `.claude/skills/screenshot-ingest/SKILL.md` / `automation/screenshots/*.yaml` /
+ ADR 0021 / AGENTS.md 更新
...
-2. **本ブランチを main にマージ**(PR 未作成。ユーザーの指示があれば作成)
+2. **本ブランチを main にマージ**(本変更のPRをマージする)Also applies to: 26-26
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.context/handoff/2026-07-30-kpi-screenshot-ingest.md around lines 12 - 18,
Update the handoff document’s references from ADR 0020 to ADR 0021 and from
`.claude/skills/screenshot-ingest.md` to
`.claude/skills/screenshot-ingest/SKILL.md`. Revise the status at line 26 to
reflect that the PR has been created once this change is submitted, while
preserving the surrounding handoff details.
|
(aside) |
|
Claude finished @keito4's task in 4m 46s —— View job コンフリクト解消完了
対応内容
これでベースブランチとのコンフリクトは解消されています。 |
- AGENTS.md に `.claude-plugin/` と `.takt/` のディレクトリエントリを追加 - script/lib/agents-md-data.sh に同エントリのデータを追加 Co-authored-by: keito4 <keito4@users.noreply.github.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@AGENTS.md`:
- Line 59: Update the automation/ entry in the directory catalog to mention both
weekly-ingest adapters and threshold rules and the screenshot-ingest definitions
under automation/screenshots/. Keep the existing table structure and wording
style unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: da21ac9f-ec82-47a6-b013-20ad9366250b
📒 Files selected for processing (2)
AGENTS.mdscript/lib/agents-md-data.sh
|
(aside) |
|
Claude finished @keito4's task in 6m 17s —— View job コンフリクト解消完了原因: 対応内容:
|
- AGENTS.md / agents-md-data.sh の block_managed_file_edit.py 説明を main の "Block editing of downstream sync-managed files" に統一 - HOOK_TABLE の block_managed_file_edit.py を block_config_edit.py 直後に移動(main と同じ順序) - automation/ の説明を両スキルを含む文言に改善(CodeRabbit提案反映) "Weekly and screenshot ingest adapters, definitions, and threshold rules" Co-authored-by: keito4 <keito4@users.noreply.github.com>
|
(aside) |
|
Claude finished @keito4's task in 14m 6s —— View job コンフリクト解消完了
コンフリクトの根本原因と対応原因: 対応内容:
マージ可能性:
|
- AGENTS.md のディレクトリテーブル列幅を main に統一(`.claude-plugin/`・`.takt/` 行が main と寸法違いでコンフリクトしていたため) - `automation/` 行の説明文を 59 字以内に短縮して同列幅に収める - `script/update-claude-code.sh` と `script/update-libraries.sh` のインライン カラー定義を削除し `script/lib/output.sh` を source する形に変更(PR #1040 相当) - `script/lib/agents-md-data.sh` の `[automation]` 説明文も同様に短縮 Co-authored-by: keito4 <keito4@users.noreply.github.com>
|
🎉 This PR is included in version 1.132.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
Why
MoneyForward のように API 非提供のサービス(口座残高等)や、Web 版が存在しないスマホ専用アプリ(銀行アプリ・iOS スクリーンタイム等)のデータを週次で自動取り込みし、しきい値判定と Slack 通知まで行う基盤が欲しい(個人 KPI 計測の入力を自動化するため)。
What
weekly-ingestスキル (.claude/skills/weekly-ingest/SKILL.md):automation/adapters/*.yamlに定義したサイトを Playwright で巡回し、取得 → 正規化 →automation/rules.yamlでしきい値判定 → Slack 通知 →.context/に記録。参照系のみ・ログイン失敗リトライ禁止・CAPTCHA 回避禁止を明記screenshot-ingestスキル (.claude/skills/screenshot-ingest/SKILL.md): Slack#kpi-screenshot-inboxに投稿されたスマホスクショを読み取り、数値化 → しきい値判定 → サマリ通知。識別子マスク・画像非コミットのルール込みautomation/ディレクトリ: アダプタ定義テンプレート、スクショ取り込み定義(iOS スクリーンタイム有効・銀行残高は無効)、共用rules.yamlHow
クラウドセッションで作成されたブランチを最新 main にマージして継続:
<name>/SKILL.mdディレクトリ形式のみ有効)に合わせ、フラットなweekly-ingest.md/screenshot-ingest.mdをディレクトリ形式へ変換しname:frontmatter を追加script/update-agents-md.shで AGENTS.md を再生成(block_managed_file_edit.pyのメタデータ補完を含む)Risk
Linked Issue
なし(claude.ai セッションからの継続作業)
🤖 Generated with Claude Code
Summary by CodeRabbit