flonat-research 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/domain-reviewer.md +336 -0
- package/.claude/agents/fixer.md +226 -0
- package/.claude/agents/paper-critic.md +370 -0
- package/.claude/agents/peer-reviewer.md +289 -0
- package/.claude/agents/proposal-reviewer.md +215 -0
- package/.claude/agents/referee2-reviewer.md +367 -0
- package/.claude/agents/references/journal-referee-profiles.md +354 -0
- package/.claude/agents/references/paper-critic/council-personas.md +77 -0
- package/.claude/agents/references/paper-critic/council-prompts.md +198 -0
- package/.claude/agents/references/peer-reviewer/report-template.md +199 -0
- package/.claude/agents/references/peer-reviewer/sa-prompts.md +260 -0
- package/.claude/agents/references/peer-reviewer/security-scan.md +188 -0
- package/.claude/agents/references/proposal-reviewer/report-template.md +144 -0
- package/.claude/agents/references/proposal-reviewer/sa-prompts.md +149 -0
- package/.claude/agents/references/referee-config.md +114 -0
- package/.claude/agents/references/referee2-reviewer/audit-checklists.md +287 -0
- package/.claude/agents/references/referee2-reviewer/report-template.md +334 -0
- package/.claude/rules/design-before-results.md +52 -0
- package/.claude/rules/ignore-agents-md.md +17 -0
- package/.claude/rules/ignore-gemini-md.md +17 -0
- package/.claude/rules/lean-claude-md.md +45 -0
- package/.claude/rules/learn-tags.md +99 -0
- package/.claude/rules/overleaf-separation.md +67 -0
- package/.claude/rules/plan-first.md +175 -0
- package/.claude/rules/read-docs-first.md +50 -0
- package/.claude/rules/scope-discipline.md +28 -0
- package/.claude/settings.json +125 -0
- package/.context/current-focus.md +33 -0
- package/.context/preferences/priorities.md +36 -0
- package/.context/preferences/task-naming.md +28 -0
- package/.context/profile.md +29 -0
- package/.context/projects/_index.md +41 -0
- package/.context/projects/papers/nudge-exp.md +22 -0
- package/.context/projects/papers/uncertainty.md +31 -0
- package/.context/resources/claude-scientific-writer-review.md +48 -0
- package/.context/resources/cunningham-multi-analyst-agents.md +104 -0
- package/.context/resources/cunningham-multilang-code-audit.md +62 -0
- package/.context/resources/google-ai-co-scientist-review.md +72 -0
- package/.context/resources/karpathy-llm-council-review.md +58 -0
- package/.context/resources/multi-coder-reliability-protocol.md +175 -0
- package/.context/resources/pedro-santanna-takeaways.md +96 -0
- package/.context/resources/venue-rankings/abs_ajg_2024.csv +1823 -0
- package/.context/resources/venue-rankings/abs_ajg_2024_econ.csv +356 -0
- package/.context/resources/venue-rankings/cabs_4_4star_theory.csv +40 -0
- package/.context/resources/venue-rankings/core_2026.csv +801 -0
- package/.context/resources/venue-rankings.md +147 -0
- package/.context/workflows/README.md +69 -0
- package/.context/workflows/daily-review.md +91 -0
- package/.context/workflows/meeting-actions.md +108 -0
- package/.context/workflows/replication-protocol.md +155 -0
- package/.context/workflows/weekly-review.md +113 -0
- package/.mcp-server-biblio/formatters.py +158 -0
- package/.mcp-server-biblio/pyproject.toml +11 -0
- package/.mcp-server-biblio/server.py +678 -0
- package/.mcp-server-biblio/sources/__init__.py +14 -0
- package/.mcp-server-biblio/sources/base.py +73 -0
- package/.mcp-server-biblio/sources/formatters.py +83 -0
- package/.mcp-server-biblio/sources/models.py +22 -0
- package/.mcp-server-biblio/sources/multi_source.py +243 -0
- package/.mcp-server-biblio/sources/openalex_source.py +183 -0
- package/.mcp-server-biblio/sources/scopus_source.py +309 -0
- package/.mcp-server-biblio/sources/wos_source.py +508 -0
- package/.mcp-server-biblio/uv.lock +896 -0
- package/.scripts/README.md +161 -0
- package/.scripts/ai_pattern_density.py +446 -0
- package/.scripts/conf +445 -0
- package/.scripts/config.py +122 -0
- package/.scripts/count_inventory.py +275 -0
- package/.scripts/daily_digest.py +288 -0
- package/.scripts/done +177 -0
- package/.scripts/extract_meeting_actions.py +223 -0
- package/.scripts/focus +176 -0
- package/.scripts/generate-codex-agents-md.py +217 -0
- package/.scripts/inbox +194 -0
- package/.scripts/notion_helpers.py +325 -0
- package/.scripts/openalex/query_helpers.py +306 -0
- package/.scripts/papers +227 -0
- package/.scripts/query +223 -0
- package/.scripts/session-history.py +201 -0
- package/.scripts/skill-health.py +516 -0
- package/.scripts/skill-log-miner.py +273 -0
- package/.scripts/sync-to-codex.sh +252 -0
- package/.scripts/task +213 -0
- package/.scripts/tasks +190 -0
- package/.scripts/week +206 -0
- package/CLAUDE.md +197 -0
- package/LICENSE +21 -0
- package/MEMORY.md +38 -0
- package/README.md +269 -0
- package/docs/agents.md +44 -0
- package/docs/bibliography-setup.md +55 -0
- package/docs/council-mode.md +36 -0
- package/docs/getting-started.md +245 -0
- package/docs/hooks.md +38 -0
- package/docs/mcp-servers.md +82 -0
- package/docs/notion-setup.md +109 -0
- package/docs/rules.md +33 -0
- package/docs/scripts.md +303 -0
- package/docs/setup-overview/setup-overview.pdf +0 -0
- package/docs/skills.md +70 -0
- package/docs/system.md +159 -0
- package/hooks/block-destructive-git.sh +66 -0
- package/hooks/context-monitor.py +114 -0
- package/hooks/postcompact-restore.py +157 -0
- package/hooks/precompact-autosave.py +181 -0
- package/hooks/promise-checker.sh +124 -0
- package/hooks/protect-source-files.sh +81 -0
- package/hooks/resume-context-loader.sh +53 -0
- package/hooks/startup-context-loader.sh +102 -0
- package/package.json +51 -0
- package/packages/cli-council/.github/workflows/claude-code-review.yml +44 -0
- package/packages/cli-council/.github/workflows/claude.yml +50 -0
- package/packages/cli-council/README.md +100 -0
- package/packages/cli-council/pyproject.toml +43 -0
- package/packages/cli-council/src/cli_council/__init__.py +19 -0
- package/packages/cli-council/src/cli_council/__main__.py +185 -0
- package/packages/cli-council/src/cli_council/backends/__init__.py +8 -0
- package/packages/cli-council/src/cli_council/backends/base.py +81 -0
- package/packages/cli-council/src/cli_council/backends/claude.py +25 -0
- package/packages/cli-council/src/cli_council/backends/codex.py +27 -0
- package/packages/cli-council/src/cli_council/backends/gemini.py +26 -0
- package/packages/cli-council/src/cli_council/checkpoint.py +212 -0
- package/packages/cli-council/src/cli_council/config.py +51 -0
- package/packages/cli-council/src/cli_council/council.py +391 -0
- package/packages/cli-council/src/cli_council/models.py +46 -0
- package/packages/llm-council/.github/workflows/claude-code-review.yml +44 -0
- package/packages/llm-council/.github/workflows/claude.yml +50 -0
- package/packages/llm-council/README.md +453 -0
- package/packages/llm-council/pyproject.toml +42 -0
- package/packages/llm-council/src/llm_council/__init__.py +23 -0
- package/packages/llm-council/src/llm_council/__main__.py +259 -0
- package/packages/llm-council/src/llm_council/checkpoint.py +193 -0
- package/packages/llm-council/src/llm_council/client.py +253 -0
- package/packages/llm-council/src/llm_council/config.py +232 -0
- package/packages/llm-council/src/llm_council/council.py +482 -0
- package/packages/llm-council/src/llm_council/models.py +46 -0
- package/packages/mcp-bibliography/MEMORY.md +31 -0
- package/packages/mcp-bibliography/_app.py +226 -0
- package/packages/mcp-bibliography/formatters.py +158 -0
- package/packages/mcp-bibliography/log/2026-03-13-2100.md +35 -0
- package/packages/mcp-bibliography/pyproject.toml +15 -0
- package/packages/mcp-bibliography/run.sh +20 -0
- package/packages/mcp-bibliography/scholarly_formatters.py +83 -0
- package/packages/mcp-bibliography/server.py +1857 -0
- package/packages/mcp-bibliography/tools/__init__.py +28 -0
- package/packages/mcp-bibliography/tools/_registry.py +19 -0
- package/packages/mcp-bibliography/tools/altmetric.py +107 -0
- package/packages/mcp-bibliography/tools/core.py +92 -0
- package/packages/mcp-bibliography/tools/dblp.py +52 -0
- package/packages/mcp-bibliography/tools/openalex.py +296 -0
- package/packages/mcp-bibliography/tools/opencitations.py +102 -0
- package/packages/mcp-bibliography/tools/openreview.py +179 -0
- package/packages/mcp-bibliography/tools/orcid.py +131 -0
- package/packages/mcp-bibliography/tools/scholarly.py +575 -0
- package/packages/mcp-bibliography/tools/unpaywall.py +63 -0
- package/packages/mcp-bibliography/tools/zenodo.py +123 -0
- package/packages/mcp-bibliography/uv.lock +711 -0
- package/scripts/setup.sh +143 -0
- package/skills/beamer-deck/SKILL.md +199 -0
- package/skills/beamer-deck/references/quality-rubric.md +54 -0
- package/skills/beamer-deck/references/review-prompts.md +106 -0
- package/skills/bib-validate/SKILL.md +261 -0
- package/skills/bib-validate/references/council-mode.md +34 -0
- package/skills/bib-validate/references/deep-verify.md +79 -0
- package/skills/bib-validate/references/fix-mode.md +36 -0
- package/skills/bib-validate/references/openalex-verification.md +45 -0
- package/skills/bib-validate/references/preprint-check.md +31 -0
- package/skills/bib-validate/references/ref-manager-crossref.md +41 -0
- package/skills/bib-validate/references/report-template.md +82 -0
- package/skills/code-archaeology/SKILL.md +141 -0
- package/skills/code-review/SKILL.md +265 -0
- package/skills/code-review/references/quality-rubric.md +67 -0
- package/skills/consolidate-memory/SKILL.md +208 -0
- package/skills/context-status/SKILL.md +126 -0
- package/skills/creation-guard/SKILL.md +230 -0
- package/skills/devils-advocate/SKILL.md +130 -0
- package/skills/devils-advocate/references/competing-hypotheses.md +83 -0
- package/skills/init-project/SKILL.md +115 -0
- package/skills/init-project-course/references/memory-and-settings.md +92 -0
- package/skills/init-project-course/references/organise-templates.md +94 -0
- package/skills/init-project-course/skill.md +147 -0
- package/skills/init-project-light/skill.md +139 -0
- package/skills/init-project-research/SKILL.md +368 -0
- package/skills/init-project-research/references/atlas-pipeline-sync.md +70 -0
- package/skills/init-project-research/references/atlas-schema.md +81 -0
- package/skills/init-project-research/references/confirmation-report.md +39 -0
- package/skills/init-project-research/references/domain-profile-template.md +104 -0
- package/skills/init-project-research/references/interview-round3.md +34 -0
- package/skills/init-project-research/references/literature-discovery.md +43 -0
- package/skills/init-project-research/references/scaffold-details.md +197 -0
- package/skills/init-project-research/templates/field-calibration.md +60 -0
- package/skills/init-project-research/templates/pipeline-manifest.md +63 -0
- package/skills/init-project-research/templates/run-all.sh +116 -0
- package/skills/init-project-research/templates/seed-files.md +337 -0
- package/skills/insights-deck/SKILL.md +151 -0
- package/skills/interview-me/SKILL.md +157 -0
- package/skills/latex/SKILL.md +141 -0
- package/skills/latex/references/latex-configs.md +183 -0
- package/skills/latex-autofix/SKILL.md +230 -0
- package/skills/latex-autofix/references/known-errors.md +183 -0
- package/skills/latex-autofix/references/quality-rubric.md +50 -0
- package/skills/latex-health-check/SKILL.md +161 -0
- package/skills/learn/SKILL.md +220 -0
- package/skills/learn/scripts/validate_skill.py +265 -0
- package/skills/lessons-learned/SKILL.md +201 -0
- package/skills/literature/SKILL.md +335 -0
- package/skills/literature/references/agent-templates.md +393 -0
- package/skills/literature/references/bibliometric-apis.md +44 -0
- package/skills/literature/references/cli-council-search.md +79 -0
- package/skills/literature/references/openalex-api-guide.md +371 -0
- package/skills/literature/references/openalex-common-queries.md +381 -0
- package/skills/literature/references/openalex-workflows.md +248 -0
- package/skills/literature/references/reference-manager-sync.md +36 -0
- package/skills/literature/references/scopus-api-guide.md +208 -0
- package/skills/literature/references/wos-api-guide.md +308 -0
- package/skills/multi-perspective/SKILL.md +311 -0
- package/skills/multi-perspective/references/computational-many-analysts.md +77 -0
- package/skills/pipeline-manifest/SKILL.md +226 -0
- package/skills/pre-submission-report/SKILL.md +153 -0
- package/skills/process-reviews/SKILL.md +244 -0
- package/skills/process-reviews/references/rr-routing.md +101 -0
- package/skills/project-deck/SKILL.md +87 -0
- package/skills/project-safety/SKILL.md +135 -0
- package/skills/proofread/SKILL.md +254 -0
- package/skills/proofread/references/quality-rubric.md +104 -0
- package/skills/python-env/SKILL.md +57 -0
- package/skills/quarto-deck/SKILL.md +226 -0
- package/skills/quarto-deck/references/markdown-format.md +143 -0
- package/skills/quarto-deck/references/quality-rubric.md +54 -0
- package/skills/save-context/SKILL.md +174 -0
- package/skills/session-log/SKILL.md +98 -0
- package/skills/shared/concept-validation-gate.md +161 -0
- package/skills/shared/council-protocol.md +265 -0
- package/skills/shared/distribution-diagnostics.md +164 -0
- package/skills/shared/engagement-stratified-sampling.md +218 -0
- package/skills/shared/escalation-protocol.md +74 -0
- package/skills/shared/external-audit-protocol.md +205 -0
- package/skills/shared/intercoder-reliability.md +256 -0
- package/skills/shared/mcp-degradation.md +81 -0
- package/skills/shared/method-probing-questions.md +163 -0
- package/skills/shared/multi-language-conventions.md +143 -0
- package/skills/shared/paid-api-safety.md +174 -0
- package/skills/shared/palettes.md +90 -0
- package/skills/shared/progressive-disclosure.md +92 -0
- package/skills/shared/project-documentation-content.md +443 -0
- package/skills/shared/project-documentation-format.md +281 -0
- package/skills/shared/project-documentation.md +100 -0
- package/skills/shared/publication-output.md +138 -0
- package/skills/shared/quality-scoring.md +70 -0
- package/skills/shared/reference-resolution.md +77 -0
- package/skills/shared/research-quality-rubric.md +165 -0
- package/skills/shared/rhetoric-principles.md +54 -0
- package/skills/shared/skill-design-patterns.md +272 -0
- package/skills/shared/skill-index.md +240 -0
- package/skills/shared/system-documentation.md +334 -0
- package/skills/shared/tikz-rules.md +402 -0
- package/skills/shared/validation-tiers.md +121 -0
- package/skills/shared/venue-guides/README.md +46 -0
- package/skills/shared/venue-guides/cell_press_style.md +483 -0
- package/skills/shared/venue-guides/conferences_formatting.md +564 -0
- package/skills/shared/venue-guides/cs_conference_style.md +463 -0
- package/skills/shared/venue-guides/examples/cell_summary_example.md +247 -0
- package/skills/shared/venue-guides/examples/medical_structured_abstract.md +313 -0
- package/skills/shared/venue-guides/examples/nature_abstract_examples.md +213 -0
- package/skills/shared/venue-guides/examples/neurips_introduction_example.md +245 -0
- package/skills/shared/venue-guides/journals_formatting.md +486 -0
- package/skills/shared/venue-guides/medical_journal_styles.md +535 -0
- package/skills/shared/venue-guides/ml_conference_style.md +556 -0
- package/skills/shared/venue-guides/nature_science_style.md +405 -0
- package/skills/shared/venue-guides/reviewer_expectations.md +417 -0
- package/skills/shared/venue-guides/venue_writing_styles.md +321 -0
- package/skills/split-pdf/SKILL.md +172 -0
- package/skills/split-pdf/methodology.md +48 -0
- package/skills/sync-notion/SKILL.md +93 -0
- package/skills/system-audit/SKILL.md +157 -0
- package/skills/system-audit/references/sub-agent-prompts.md +294 -0
- package/skills/task-management/SKILL.md +131 -0
- package/skills/update-focus/SKILL.md +204 -0
- package/skills/update-project-doc/SKILL.md +194 -0
- package/skills/validate-bib/SKILL.md +242 -0
- package/skills/validate-bib/references/council-mode.md +34 -0
- package/skills/validate-bib/references/deep-verify.md +71 -0
- package/skills/validate-bib/references/openalex-verification.md +45 -0
- package/skills/validate-bib/references/preprint-check.md +31 -0
- package/skills/validate-bib/references/report-template.md +62 -0
package/docs/scripts.md
ADDED
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
# Scripts & CLI Tools
|
|
2
|
+
|
|
3
|
+
Quick reference for command-line tools in your task management system.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
| Command | Purpose |
|
|
8
|
+
|---------|---------|
|
|
9
|
+
| `task "..."` | Create a task |
|
|
10
|
+
| `tasks` | List tasks |
|
|
11
|
+
| `done "..."` | Mark task done |
|
|
12
|
+
| `focus "..."` | Update current focus |
|
|
13
|
+
| `papers` | Show research pipeline |
|
|
14
|
+
| `inbox` | Tasks needing dates |
|
|
15
|
+
| `week` | Weekly summary |
|
|
16
|
+
| `conf` | Conference deadlines |
|
|
17
|
+
| `query "..."` | Search files + Notion |
|
|
18
|
+
|
|
19
|
+
## Setup (one time)
|
|
20
|
+
|
|
21
|
+
### Option A: Using .env file (recommended)
|
|
22
|
+
|
|
23
|
+
1. **Get a Notion token:** https://www.notion.so/my-integrations
|
|
24
|
+
2. **Add token to `.env`** (already created):
|
|
25
|
+
```bash
|
|
26
|
+
export NOTION_TOKEN="your-token-here"
|
|
27
|
+
```
|
|
28
|
+
3. **Run scripts with uv:**
|
|
29
|
+
```bash
|
|
30
|
+
cd "Task Management"
|
|
31
|
+
uv run python .scripts/tasks
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Option B: Add to PATH
|
|
35
|
+
|
|
36
|
+
1. **Add to `~/.zshrc`:**
|
|
37
|
+
```bash
|
|
38
|
+
export PATH="$PATH:$HOME/path/to/Task Management/.scripts"
|
|
39
|
+
source "$HOME/path/to/Task Management/.env"
|
|
40
|
+
```
|
|
41
|
+
2. **Reload:** `source ~/.zshrc`
|
|
42
|
+
|
|
43
|
+
### For both options
|
|
44
|
+
|
|
45
|
+
**Share databases** with your integration in Notion (Tasks Tracker + Research Pipeline)
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## task — Create Tasks
|
|
50
|
+
|
|
51
|
+
Creates tasks with **Inbox** status by default (GTD-style capture).
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
task "Review paper feedback" # basic (goes to Inbox)
|
|
55
|
+
task "Email supervisor" -p "Paper Revision" # with project
|
|
56
|
+
task "Submit paper" --priority high # with priority
|
|
57
|
+
task "Read Smith 2024" -d friday # due Friday
|
|
58
|
+
task "Follow up" -s "Meeting" # from meeting
|
|
59
|
+
task "Exercise" -a personal # with area
|
|
60
|
+
task --list-projects # show projects
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
| Flag | Description |
|
|
64
|
+
|------|-------------|
|
|
65
|
+
| `-p, --project` | Project name |
|
|
66
|
+
| `-a, --area` | Area: research, teaching, career, personal, health, learning |
|
|
67
|
+
| `--priority` | high, medium, low |
|
|
68
|
+
| `-d, --due` | Due date (today, tomorrow, friday, 2024-03-15) |
|
|
69
|
+
| `-s, --source` | Meeting, Email, Supervisor request, etc. |
|
|
70
|
+
| `--desc` | Additional description |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## tasks — Query Tasks
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
tasks # all active tasks
|
|
78
|
+
tasks --overdue # overdue only
|
|
79
|
+
tasks --today # due today
|
|
80
|
+
tasks -p "Paper Revision" # filter by project
|
|
81
|
+
tasks --priority high # filter by priority
|
|
82
|
+
tasks --all # include completed
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
| Flag | Description |
|
|
86
|
+
|------|-------------|
|
|
87
|
+
| `--overdue` | Show overdue tasks |
|
|
88
|
+
| `--today` | Show tasks due today |
|
|
89
|
+
| `-p, --project` | Filter by project |
|
|
90
|
+
| `--priority` | Filter by priority |
|
|
91
|
+
| `--status` | Filter by status |
|
|
92
|
+
| `--all` | Include completed tasks |
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## done — Complete Tasks
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
done "paper feedback" # mark matching task as done
|
|
100
|
+
done --list # show tasks to choose from
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
If multiple tasks match, you'll be prompted to choose.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## focus — Update Current Focus
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
focus "Working on paper section 4" # what you're working on
|
|
111
|
+
focus --left-off "Finished draft" # where you left off
|
|
112
|
+
focus --next "Review with supervisor" # add next step
|
|
113
|
+
focus --question "Check methodology?" # add open question
|
|
114
|
+
focus --show # show current focus
|
|
115
|
+
focus --clear # start fresh
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Updates `.context/current-focus.md` directly.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## papers — Research Pipeline
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
papers # show all papers
|
|
126
|
+
papers --active # show papers in progress
|
|
127
|
+
papers --update "Paper A" "R&R" # update paper stage
|
|
128
|
+
papers --stages # list available stages
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Stages:** Idea > Literature Review > Drafting > Internal Review > Submitted > Under Review > R&R > Revising > Accepted > Published
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## inbox — Tasks Without Dates
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
inbox # show inbox tasks
|
|
139
|
+
inbox --assign # interactively assign due dates
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Shortcuts in assign mode:**
|
|
143
|
+
- `t` = today
|
|
144
|
+
- `tm` = tomorrow
|
|
145
|
+
- `w` = +1 week
|
|
146
|
+
- `m` = +1 month
|
|
147
|
+
- `fri` = next Friday
|
|
148
|
+
- `s` = skip
|
|
149
|
+
- `q` = quit
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## week — Weekly Summary
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
week # this week's summary
|
|
157
|
+
week --last # last week's summary
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Shows: completed, due this week, overdue, in progress.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## conf — Conference Tracking
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
conf # show upcoming deadlines
|
|
168
|
+
conf --search # open Google CFP search links in browser
|
|
169
|
+
conf --add # interactively add a conference
|
|
170
|
+
conf --remind # weekly reminder checklist
|
|
171
|
+
conf --deadlines # show all deadlines
|
|
172
|
+
conf --all # include past conferences
|
|
173
|
+
conf --topics # list available topics
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Weekly routine:**
|
|
177
|
+
1. Run `conf --remind` on Mondays
|
|
178
|
+
2. Run `conf --search` to find new conferences
|
|
179
|
+
3. Add with `conf --add`
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## query — Search Everything
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
query "game theory" # search files + Notion
|
|
187
|
+
query --files "topic" # search only context files
|
|
188
|
+
query --notion "keyword" # search only Notion
|
|
189
|
+
query --papers "collaboration" # search Research Pipeline
|
|
190
|
+
query --tasks "meeting" # search Tasks Tracker
|
|
191
|
+
query --conferences "deadline" # search Conferences
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
| Flag | Description |
|
|
195
|
+
|------|-------------|
|
|
196
|
+
| `--files` | Search only local context files |
|
|
197
|
+
| `--notion` | Search only Notion |
|
|
198
|
+
| `--papers` | Search Research Pipeline database |
|
|
199
|
+
| `--tasks` | Search Tasks Tracker database |
|
|
200
|
+
| `--conferences` | Search Conferences database |
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## How It Works
|
|
205
|
+
|
|
206
|
+
All scripts are Python CLI tools in `.scripts/` that talk to the Notion API:
|
|
207
|
+
|
|
208
|
+
| File | Type | Purpose |
|
|
209
|
+
|------|------|---------|
|
|
210
|
+
| `task` | CLI tool | Create tasks |
|
|
211
|
+
| `tasks` | CLI tool | Query tasks |
|
|
212
|
+
| `done` | CLI tool | Complete tasks |
|
|
213
|
+
| `focus` | CLI tool | Update current focus |
|
|
214
|
+
| `papers` | CLI tool | Research pipeline |
|
|
215
|
+
| `inbox` | CLI tool | Inbox management |
|
|
216
|
+
| `week` | CLI tool | Weekly summary |
|
|
217
|
+
| `conf` | CLI tool | Conference tracking |
|
|
218
|
+
| `query` | CLI tool | Cross-system search |
|
|
219
|
+
| `config.py` | Helper | Database IDs, project lists, constants |
|
|
220
|
+
| `notion_helpers.py` | Helper | Notion API utilities, project inference |
|
|
221
|
+
| `daily_digest.py` | Helper | Daily digest generation |
|
|
222
|
+
| `extract_meeting_actions.py` | Helper | Meeting transcript action extraction |
|
|
223
|
+
| `openalex/` | Library | OpenAlex API client for scholarly search |
|
|
224
|
+
|
|
225
|
+
## Configuration
|
|
226
|
+
|
|
227
|
+
### `config.py`
|
|
228
|
+
|
|
229
|
+
The central configuration file contains:
|
|
230
|
+
|
|
231
|
+
- **Database IDs** — Notion database and page IDs for your workspace
|
|
232
|
+
- **Projects list** — Project names for task categorisation (keep in sync with `.context/projects/_index.md`)
|
|
233
|
+
- **Universities list** — Institutions for task tagging
|
|
234
|
+
- **Source types, priorities, statuses** — Dropdown values matching your Notion schema
|
|
235
|
+
|
|
236
|
+
### `notion_helpers.py`
|
|
237
|
+
|
|
238
|
+
Shared utilities including:
|
|
239
|
+
|
|
240
|
+
- **Task formatting** — Converts CLI arguments to Notion API properties
|
|
241
|
+
- **Deadline parsing** — Natural language dates ("friday", "end of month")
|
|
242
|
+
- **Project inference** — Keyword and people-based project matching
|
|
243
|
+
- **Priority inference** — Context-aware priority assignment
|
|
244
|
+
- **Action extraction** — Regex-based meeting transcript parsing
|
|
245
|
+
|
|
246
|
+
## Extending
|
|
247
|
+
|
|
248
|
+
### Adding a new CLI tool
|
|
249
|
+
|
|
250
|
+
1. Create a Python file in `.scripts/` (no `.py` extension for CLI commands)
|
|
251
|
+
2. Add a shebang: `#!/usr/bin/env python3`
|
|
252
|
+
3. Import from `config.py` and `notion_helpers.py`
|
|
253
|
+
4. Use `argparse` for flags
|
|
254
|
+
5. Make executable: `chmod +x .scripts/your-tool`
|
|
255
|
+
|
|
256
|
+
### Customising for your workspace
|
|
257
|
+
|
|
258
|
+
1. Update database IDs in `config.py` to match your Notion workspace
|
|
259
|
+
2. Update the `PROJECTS` list to match your project names
|
|
260
|
+
3. Update `project_keywords` and `people_projects` in `notion_helpers.py` for auto-categorisation
|
|
261
|
+
4. Update `SEARCH_KEYWORDS` and `TOPICS` in `conf` for conference tracking
|
|
262
|
+
|
|
263
|
+
## Date Formats
|
|
264
|
+
|
|
265
|
+
| Input | Result |
|
|
266
|
+
|-------|--------|
|
|
267
|
+
| `today` | Today's date |
|
|
268
|
+
| `tomorrow` | Tomorrow |
|
|
269
|
+
| `monday` | Next Monday |
|
|
270
|
+
| `friday` | Next Friday |
|
|
271
|
+
| `2024-03-15` | Specific date |
|
|
272
|
+
| `15/03/2024` | UK format |
|
|
273
|
+
|
|
274
|
+
## Areas of Responsibility
|
|
275
|
+
|
|
276
|
+
| Area | Description |
|
|
277
|
+
|------|-------------|
|
|
278
|
+
| Research | Papers, conferences, supervision |
|
|
279
|
+
| Teaching | Course prep, marking |
|
|
280
|
+
| Career | Applications, networking |
|
|
281
|
+
| Personal | Admin, finance, relationships |
|
|
282
|
+
| Health | Medical, fitness, wellbeing |
|
|
283
|
+
| Learning | Courses, certifications |
|
|
284
|
+
|
|
285
|
+
## Troubleshooting
|
|
286
|
+
|
|
287
|
+
### "NOTION_TOKEN not set"
|
|
288
|
+
```bash
|
|
289
|
+
export NOTION_TOKEN="your-token-here"
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### "command not found"
|
|
293
|
+
```bash
|
|
294
|
+
export PATH="$PATH:$HOME/path/to/Task Management/.scripts"
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### "Error 401/404"
|
|
298
|
+
Make sure your Notion integration has access to:
|
|
299
|
+
- Tasks Tracker database
|
|
300
|
+
- Research Pipeline database
|
|
301
|
+
- Conferences database
|
|
302
|
+
|
|
303
|
+
(In Notion: ... > Connections > Add integration)
|
|
Binary file
|
package/docs/skills.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Skills
|
|
2
|
+
|
|
3
|
+
> 38 reusable workflow definitions available across all projects.
|
|
4
|
+
|
|
5
|
+
Skills are structured instruction sets (`SKILL.md` files) that turn Claude into a specialised tool for specific tasks — from compiling LaTeX to bootstrapping research projects.
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
| Skill | Description |
|
|
10
|
+
|-------|-------------|
|
|
11
|
+
| `beamer-deck` | Use when you need to create an academic Beamer presentation with original theme and multi-agent review |
|
|
12
|
+
| `bib-validate` | Cross-reference \\cite{} keys against .bib files or embedded \\bibitem entries. Finds missing, unused, and typo'd citation keys. Deep verification mode spawns parallel agents for DOI/metadata validation at scale. Fix mode auto-adds missing entries to Zotero |
|
|
13
|
+
| `code-archaeology` | Use when you need to review and understand old code, data, or analysis files |
|
|
14
|
+
| `code-review` | Use when you need a quality review of R or Python research scripts |
|
|
15
|
+
| `consolidate-memory` | Use when you need to prune duplicates and merge overlapping entries in MEMORY.md files |
|
|
16
|
+
| `context-status` | Use when you need to check current context status and session health |
|
|
17
|
+
| `creation-guard` | Use when you need a pre-flight duplicate check before creating new skills or agents |
|
|
18
|
+
| `devils-advocate` | Use when you need to challenge research assumptions or stress-test arguments |
|
|
19
|
+
| `init-project` | Bootstrap a new research project. Interview for details, scaffold directory structure, create Overleaf symlink, initialise git, and create project context files |
|
|
20
|
+
| `init-project-course` | Use when you need to bootstrap a university course or module folder |
|
|
21
|
+
| `init-project-light` | Use when you need to bootstrap a lightweight project with minimal structure |
|
|
22
|
+
| `init-project-research` | Use when you need to bootstrap a full research project with directory scaffold and Overleaf symlink |
|
|
23
|
+
| `insights-deck` | Use when you need a timestamped Claude Code insights report and Beamer presentation |
|
|
24
|
+
| `interview-me` | Use when you need to conduct a structured interview to extract knowledge or preferences |
|
|
25
|
+
| `latex` | Use when you need to compile a LaTeX document or manage LaTeX projects |
|
|
26
|
+
| `latex-autofix` | Use when you need to compile LaTeX with autonomous error resolution and citation audit |
|
|
27
|
+
| `latex-health-check` | Use when you need to compile all LaTeX projects and check cross-project consistency |
|
|
28
|
+
| `learn` | Extract reusable knowledge from the current session into a persistent skill.\nUse when you discover something non-obvious, create a workaround, or develop\na multi-step workflow that future sessions would benefit from |
|
|
29
|
+
| `lessons-learned` | Use when you need a structured post-mortem after incidents, mistakes, or stuck sessions |
|
|
30
|
+
| `literature` | Use when you need academic literature discovery, synthesis, or bibliography management |
|
|
31
|
+
| `multi-perspective` | Use when you need to explore a research question from multiple independent perspectives |
|
|
32
|
+
| `pipeline-manifest` | Use when you need to map scripts to their inputs, outputs, and paper figures/tables |
|
|
33
|
+
| `pre-submission-report` | Use when you need all quality checks run before submission, producing a single dated report |
|
|
34
|
+
| `process-reviews` | Use when you need to process referee comments from a reviews PDF into tracking files |
|
|
35
|
+
| `project-deck` | Use when you need to create a presentation deck to communicate project status |
|
|
36
|
+
| `project-safety` | Use when you need to set up safety rules and folder structures for a research project |
|
|
37
|
+
| `proofread` | Use when you need academic proofreading of a LaTeX paper (11 check categories) |
|
|
38
|
+
| `python-env` | Use when you need Python environment management with uv (install, create venv, manage deps) |
|
|
39
|
+
| `quarto-deck` | Use when you need to generate a Reveal.js HTML presentation from Markdown |
|
|
40
|
+
| `save-context` | Use when you need to save information from the current conversation to the context library |
|
|
41
|
+
| `session-log` | Use when you need to create a timestamped progress log for a research session |
|
|
42
|
+
| `split-pdf` | Use when you need to download, split, and deeply read an academic PDF |
|
|
43
|
+
| `sync-notion` | Use when you need to sync the current project's state to the context library and Notion |
|
|
44
|
+
| `system-audit` | Use when you need to run parallel audits across skills, hooks, agents, rules, and conventions |
|
|
45
|
+
| `task-management` | Use when you need help with daily planning, weekly reviews, meeting actions, or vault task queries |
|
|
46
|
+
| `update-focus` | Use when you need to update current-focus.md with a structured session summary |
|
|
47
|
+
| `update-project-doc` | Use when you need to update a project's own CLAUDE.md, README.md, or docs/ to reflect current state |
|
|
48
|
+
| `validate-bib` | Cross-reference \\cite{} keys against .bib files or embedded \\bibitem entries. Finds missing, unused, and typo'd citation keys. Deep verification mode spawns parallel agents for DOI/metadata validation at scale. Read-only in standard mode |
|
|
49
|
+
|
|
50
|
+
## Using Skills
|
|
51
|
+
|
|
52
|
+
| Method | Example |
|
|
53
|
+
|--------|---------|
|
|
54
|
+
| Slash command | `/latex-autofix` |
|
|
55
|
+
| Natural language | "Compile my paper" or "Proofread this" |
|
|
56
|
+
|
|
57
|
+
## Skill Structure
|
|
58
|
+
|
|
59
|
+
Each skill is a directory in `skills/` containing a `SKILL.md` file with:
|
|
60
|
+
|
|
61
|
+
1. **YAML frontmatter** — name, description, and allowed tools
|
|
62
|
+
2. **Markdown body** — structured instructions Claude follows
|
|
63
|
+
|
|
64
|
+
## Creating New Skills
|
|
65
|
+
|
|
66
|
+
1. Create a directory: `skills/<skill-name>/`
|
|
67
|
+
2. Add a `SKILL.md` with YAML frontmatter and markdown instructions
|
|
68
|
+
3. The skill is immediately available via `/skill-name`
|
|
69
|
+
|
|
70
|
+
See any existing skill for the format.
|
package/docs/system.md
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# System Architecture
|
|
2
|
+
|
|
3
|
+
> How the components fit together.
|
|
4
|
+
|
|
5
|
+
## Directory Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
claude-research/
|
|
9
|
+
├── CLAUDE.md # Main instruction file
|
|
10
|
+
├── README.md # Setup guide
|
|
11
|
+
├── MEMORY.md # Accumulated knowledge
|
|
12
|
+
├── .gitignore
|
|
13
|
+
│
|
|
14
|
+
├── .claude/
|
|
15
|
+
│ ├── agents/ # 6 specialised review agents
|
|
16
|
+
│ │ ├── referee2-reviewer.md
|
|
17
|
+
│ │ ├── peer-reviewer.md
|
|
18
|
+
│ │ ├── proposal-reviewer.md
|
|
19
|
+
│ │ ├── paper-critic.md
|
|
20
|
+
│ │ ├── domain-reviewer.md
|
|
21
|
+
│ │ └── fixer.md
|
|
22
|
+
│ ├── rules/ # 9 auto-loaded policy rules
|
|
23
|
+
│ │ ├── plan-first.md
|
|
24
|
+
│ │ ├── scope-discipline.md
|
|
25
|
+
│ │ ├── learn-tags.md
|
|
26
|
+
│ │ ├── read-docs-first.md
|
|
27
|
+
│ │ ├── lean-claude-md.md
|
|
28
|
+
│ │ ├── overleaf-separation.md
|
|
29
|
+
│ │ ├── ignore-agents-md.md
|
|
30
|
+
│ │ ├── ignore-gemini-md.md
|
|
31
|
+
│ │ └── design-before-results.md
|
|
32
|
+
│ └── settings.json # Permissions, hooks, model config
|
|
33
|
+
│
|
|
34
|
+
├── skills/ # 30 slash commands
|
|
35
|
+
│ ├── shared/ # Shared utilities
|
|
36
|
+
│ │ ├── palettes.md
|
|
37
|
+
│ │ ├── quality-scoring.md
|
|
38
|
+
│ │ └── rhetoric-principles.md
|
|
39
|
+
│ ├── proofread/
|
|
40
|
+
│ ├── latex-autofix/
|
|
41
|
+
│ ├── literature/
|
|
42
|
+
│ └── ...
|
|
43
|
+
│
|
|
44
|
+
├── hooks/ # 8 automated guardrails
|
|
45
|
+
│ ├── block-destructive-git.sh
|
|
46
|
+
│ ├── context-monitor.py
|
|
47
|
+
│ ├── postcompact-restore.py
|
|
48
|
+
│ ├── precompact-autosave.py
|
|
49
|
+
│ ├── promise-checker.sh
|
|
50
|
+
│ ├── protect-source-files.sh
|
|
51
|
+
│ ├── resume-context-loader.sh
|
|
52
|
+
│ └── startup-context-loader.sh
|
|
53
|
+
│
|
|
54
|
+
├── .context/ # AI context library
|
|
55
|
+
│ ├── profile.md # Your identity and background
|
|
56
|
+
│ ├── current-focus.md # What you're working on NOW
|
|
57
|
+
│ ├── projects/
|
|
58
|
+
│ │ ├── _index.md # All projects overview
|
|
59
|
+
│ │ └── papers/ # Individual paper metadata
|
|
60
|
+
│ ├── preferences/
|
|
61
|
+
│ │ ├── priorities.md # Priority framework
|
|
62
|
+
│ │ └── task-naming.md # Task naming conventions
|
|
63
|
+
│ ├── workflows/ # Process guides
|
|
64
|
+
│ │ ├── daily-review.md
|
|
65
|
+
│ │ ├── weekly-review.md
|
|
66
|
+
│ │ ├── meeting-actions.md
|
|
67
|
+
│ │ └── replication-protocol.md
|
|
68
|
+
│ └── resources/ # Reference data
|
|
69
|
+
│ ├── journal-rankings.md
|
|
70
|
+
│ └── conference-rankings.md
|
|
71
|
+
│
|
|
72
|
+
├── .mcp-server-openalex/ # OpenAlex scholarly search
|
|
73
|
+
│ ├── server.py
|
|
74
|
+
│ ├── formatters.py
|
|
75
|
+
│ ├── pyproject.toml
|
|
76
|
+
│ └── uv.lock
|
|
77
|
+
│
|
|
78
|
+
├── docs/ # Documentation
|
|
79
|
+
│ ├── system.md # This file
|
|
80
|
+
│ ├── skills.md
|
|
81
|
+
│ ├── agents.md
|
|
82
|
+
│ ├── hooks.md
|
|
83
|
+
│ └── rules.md
|
|
84
|
+
│
|
|
85
|
+
├── log/ # Session logs
|
|
86
|
+
│ ├── .gitkeep
|
|
87
|
+
│ └── plans/ # Saved plans
|
|
88
|
+
│ └── .gitkeep
|
|
89
|
+
│
|
|
90
|
+
└── scripts/
|
|
91
|
+
└── setup.sh # Initial setup script
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Symlink Architecture
|
|
95
|
+
|
|
96
|
+
The `setup.sh` script creates four symlinks in `~/.claude/`:
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
~/.claude/skills/ → <repo>/skills/
|
|
100
|
+
~/.claude/agents/ → <repo>/.claude/agents/
|
|
101
|
+
~/.claude/rules/ → <repo>/.claude/rules/
|
|
102
|
+
~/.claude/hooks/ → <repo>/hooks/
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
This makes all components globally available from any project directory.
|
|
106
|
+
|
|
107
|
+
## How Components Interact
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
Session Start
|
|
111
|
+
│
|
|
112
|
+
├── startup-context-loader.sh → Reads .context/ files
|
|
113
|
+
│ Outputs to Claude as additionalContext
|
|
114
|
+
│
|
|
115
|
+
├── Rules loaded → All 9 rules active
|
|
116
|
+
│
|
|
117
|
+
└── Claude ready
|
|
118
|
+
│
|
|
119
|
+
├── User: "/proofread" → Skill invoked (same session)
|
|
120
|
+
│
|
|
121
|
+
├── User: "Review paper" → Agent launched (separate context via Task tool)
|
|
122
|
+
│
|
|
123
|
+
├── Claude: "git push -f" → block-destructive-git.sh BLOCKS
|
|
124
|
+
│
|
|
125
|
+
├── Claude uses Bash → context-monitor.py tracks usage
|
|
126
|
+
│
|
|
127
|
+
├── Context compression → precompact-autosave.py saves state
|
|
128
|
+
│ postcompact-restore.py restores state
|
|
129
|
+
│
|
|
130
|
+
└── Session ends → promise-checker.sh verifies claims
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Configuration
|
|
134
|
+
|
|
135
|
+
All configuration lives in `~/.claude/settings.json`:
|
|
136
|
+
|
|
137
|
+
- **`permissions.allow`**: Commands Claude can run without prompting
|
|
138
|
+
- **`permissions.deny`**: Commands that are always blocked (bare python/pip)
|
|
139
|
+
- **`hooks`**: Which scripts run at which events
|
|
140
|
+
- **`model`**: Default model preference
|
|
141
|
+
|
|
142
|
+
## Extending the System
|
|
143
|
+
|
|
144
|
+
### Adding a new skill
|
|
145
|
+
1. Create `skills/my-skill/SKILL.md`
|
|
146
|
+
2. Available immediately as `/my-skill`
|
|
147
|
+
|
|
148
|
+
### Adding a new agent
|
|
149
|
+
1. Create `.claude/agents/my-agent.md`
|
|
150
|
+
2. Available immediately via Task tool
|
|
151
|
+
|
|
152
|
+
### Adding a new hook
|
|
153
|
+
1. Create script in `hooks/`
|
|
154
|
+
2. Make executable: `chmod +x hooks/my-hook.sh`
|
|
155
|
+
3. Add to `~/.claude/settings.json`
|
|
156
|
+
|
|
157
|
+
### Adding a new rule
|
|
158
|
+
1. Create `.claude/rules/my-rule.md`
|
|
159
|
+
2. Auto-loaded in every session
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Skip on non-Mac environments (cloud, mobile)
|
|
3
|
+
source "$(dirname "$0")/resolve-task-mgmt.sh" || exit 0
|
|
4
|
+
# block-destructive-git.sh
|
|
5
|
+
# PreToolUse hook for Bash — catches dangerous git/shell commands
|
|
6
|
+
# and surfaces a permission prompt. Soft block via permissionDecision: "ask".
|
|
7
|
+
|
|
8
|
+
INPUT=$(cat)
|
|
9
|
+
|
|
10
|
+
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')
|
|
11
|
+
|
|
12
|
+
# No command — allow
|
|
13
|
+
if [ -z "$COMMAND" ]; then
|
|
14
|
+
exit 0
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
REASON=""
|
|
18
|
+
|
|
19
|
+
# Check destructive patterns
|
|
20
|
+
if echo "$COMMAND" | grep -qE 'git\s+reset\s+--hard'; then
|
|
21
|
+
REASON="git reset --hard will discard all uncommitted changes"
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
if echo "$COMMAND" | grep -qE 'git\s+push\s+(-f|--force)(\s|$)' && \
|
|
25
|
+
! echo "$COMMAND" | grep -q '\-\-force-with-lease'; then
|
|
26
|
+
REASON="git push --force can overwrite remote history (use --force-with-lease instead?)"
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
if echo "$COMMAND" | grep -qE 'git\s+clean\s+-[a-zA-Z]*f' && \
|
|
30
|
+
! echo "$COMMAND" | grep -qE 'git\s+clean\s+-[a-zA-Z]*n'; then
|
|
31
|
+
REASON="git clean -f will permanently delete untracked files"
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
if echo "$COMMAND" | grep -qE 'git\s+checkout\s+\.\s*$'; then
|
|
35
|
+
REASON="git checkout . will discard all unstaged changes"
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
if echo "$COMMAND" | grep -qE 'git\s+restore\s+\.\s*$'; then
|
|
39
|
+
REASON="git restore . will discard all unstaged changes"
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
if echo "$COMMAND" | grep -qE 'git\s+branch\s+-D\s'; then
|
|
43
|
+
REASON="git branch -D force-deletes a branch (use -d for safe delete)"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
if echo "$COMMAND" | grep -qE 'rm\s+-[a-zA-Z]*r[a-zA-Z]*f|rm\s+-[a-zA-Z]*f[a-zA-Z]*r'; then
|
|
47
|
+
REASON="rm -rf is a destructive operation"
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
# If no dangerous pattern matched, allow silently
|
|
51
|
+
if [ -z "$REASON" ]; then
|
|
52
|
+
exit 0
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
# Dangerous pattern found — ask for confirmation
|
|
56
|
+
cat <<EOF
|
|
57
|
+
{
|
|
58
|
+
"hookSpecificOutput": {
|
|
59
|
+
"hookEventName": "PreToolUse",
|
|
60
|
+
"permissionDecision": "ask",
|
|
61
|
+
"permissionDecisionReason": "$REASON"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
EOF
|
|
65
|
+
|
|
66
|
+
exit 0
|