# amplifier-module-hooks-status-context
**Repository Path**: mirrors_microsoft/amplifier-module-hooks-status-context
## Basic Information
- **Project Name**: amplifier-module-hooks-status-context
- **Description**: Reference implementation of a status context hooks module for the Amplifier project
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-16
- **Last Updated**: 2026-01-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# amplifier-module-hooks-status-context
Injects environment info (working directory, platform, OS, date), session context, and optional git status into agent context before each prompt. Ensures agent has fresh contextual information for decisions.
## Usage
```yaml
hooks:
- module: hooks-status-context
source: git+https://github.com/microsoft/amplifier-module-hooks-status-context@main
config:
working_dir: "." # Working directory for operations (default: ".")
include_git: true # Enable git status (default: true)
git_include_status: true # Show working dir status (default: true)
git_include_commits: 5 # Recent commits count (default: 5, 0=disable)
git_include_branch: true # Show current branch (default: true)
git_include_main_branch: true # Detect main branch (default: true)
git_status_include_untracked: true # Include untracked files (default: true)
git_status_max_untracked: 20 # Max untracked files (default: 20, 0=unlimited)
git_status_max_tracked: 50 # Max tracked files (default: 50)
git_status_max_lines: 100 # Hard output cap (default: 100)
include_datetime: true # Show date/time (default: true)
datetime_include_timezone: false # Include TZ name (default: false)
include_session: true # Show session ID info (default: true)
# Token safety (tier-based filtering)
git_status_enable_path_filtering: true # Enable smart filtering (default: true)
git_status_tier1_patterns_extend: [] # Extend tier1 ignore patterns
git_status_tier2_patterns_extend: [] # Extend tier2 limit patterns
git_status_tier2_limit: 10 # Max tier2 files shown (default: 10)
git_status_show_filter_summary: true # Show filter messages (default: true)
```
## Token Safety (Enhanced)
**This module uses smart tier-based filtering to prevent token bloat from large repositories.**
### Why This Matters
Without proper filtering, git status can cause massive token consumption:
- `node_modules/`: 50,000+ files → 200k+ tokens ($3+ per conversation)
- `.venv/`: 10,000+ files → 100k+ tokens
- `build/dist/`: 5,000+ files → 50k+ tokens
**Even if these directories are tracked** (accidentally `git add`ed), they're filtered by default.
### How It Works: Three-Tier System
Files are automatically classified into three tiers:
#### Tier 1: Always Ignore (DoS Prevention)
**Never shown individually, regardless of tracked/untracked status.**
Default patterns:
- **Node/JS**: `node_modules/`, `.npm/`, `.yarn/`, `.pnpm-store/`
- **Python**: `.venv/`, `venv/`, `__pycache__/`, `*.pyc`, `.pytest_cache/`, `.mypy_cache/`
- **Build outputs**: `build/`, `dist/`, `out/`, `target/`, `bin/`, `obj/`
- **Git internals**: `.git/`
Treatment:
- Counted but not shown individually
- **WARNING** displayed if tracked files exist in these paths
- Suggestion provided to remove from tracking
#### Tier 2: Limited Display (Support Files)
**Show some, summarize the rest.**
Default patterns:
- Lock files: `*.lock`, `yarn.lock`, `package-lock.json`, `Gemfile.lock`
- IDE configs: `.idea/`, `.vscode/`, `*.swp`
- Logs: `*.log`, `logs/`, `coverage/`
- Minified: `*.min.js`, `*.min.css`, `*.map`
Treatment:
- First 10 shown
- Remainder summarized with count
#### Tier 3: Important Files (Always Show)
**Everything else - your source code.**
Treatment:
- All shown (up to hard limits)
- Tracked files: max 50 (default)
- Untracked files: max 20 (default)
- Hard cap: 100 lines total
### Example Output
**Normal project:**
```
Status:
M src/api.py
A src/new_feature.py
?? test.py
?? debug.log
[Filtered: 12,847 untracked files in ignored paths (node_modules: 12,790, .venv: 57)]
```
**Tracked files in ignored paths (problem detected):**
```
Status:
M src/api.py
[WARNING: 150 tracked files in ignored paths]
M node_modules/pkg/index.js
M node_modules/pkg/lib.js
A .venv/lib/python3.11/site.py
... and 147 more
[Suggestion: These directories should not be tracked]
[Filtered: 5,000 untracked files in ignored paths]
```
**Many files changed:**
```
Status:
M src/api.py
M src/auth.py
... (48 more tracked files omitted)
[Hard limit reached: output truncated to 100 lines]
[Filtered: 27 support files (lockfiles: 3, IDE configs: 15, logs: 9)]
[Filtered: 8,543 untracked files in ignored paths]
```
### Configuration Examples
**Default (zero config - safe):**
```yaml
hooks:
- module: hooks-status-context
# No config needed - filtering enabled by default
```
**Extend ignore patterns:**
```yaml
config:
git_status_tier1_patterns_extend:
- "generated/**"
- "third_party/**"
- "*.pb.go" # Protocol buffer generated files
```
**Adjust limits:**
```yaml
config:
git_status_max_tracked: 100 # Show more tracked files
git_status_max_untracked: 50 # Show more untracked files
git_status_tier2_limit: 25 # Show more support files
git_status_max_lines: 200 # Higher hard limit
```
**Disable path filtering (use with caution):**
```yaml
config:
git_status_enable_path_filtering: false # Disable tier filtering
git_status_max_lines: 500 # Still keep safety cap
```
**Hide filter summaries:**
```yaml
config:
git_status_show_filter_summary: false # Cleaner output, less context
```
## Output Format
**In git repository (root session):**
```
Here is useful information about the environment you are running in:
Working directory: /home/user/projects/myapp
Session ID: session_abc123
Is sub-session: No
Is directory a git repo: Yes
Platform: linux
OS Version: Linux 6.6.87.2-microsoft-standard-WSL2
Today's date: 2025-11-09 14:23:45
gitStatus: This is the git status at the start of the conversation. Note that this status is a snapshot in time, and will not update during the conversation.
Current branch: feature/new-api
Main branch (you will usually use this for PRs): main
Status:
M src/api.py
A src/new_feature.py
?? tests/test_api.py
?? debug.log
... (1,847 more untracked files omitted)
Recent commits:
abc1234 feat: Add new API endpoint
def5678 refactor: Simplify request handling
```
**In a sub-session (spawned by task tool):**
```
Here is useful information about the environment you are running in:
Working directory: /home/user/projects/myapp
Session ID: session_abc123-1234567890abcdef_zen-architect
Parent Session ID: session_abc123
Is sub-session: Yes
Is directory a git repo: Yes
Platform: linux
OS Version: Linux 6.6.87.2-microsoft-standard-WSL2
Today's date: 2025-11-09 14:23:45
...
```
**Outside git repository:**
```
Here is useful information about the environment you are running in:
Working directory: /home/user/documents
Session ID: session_def456
Is sub-session: No
Is directory a git repo: No
Platform: linux
OS Version: Linux 6.6.87.2-microsoft-standard-WSL2
Today's date: 2025-11-09 14:23:45
```
Note: Git status only shown when in a git repository and `include_git: true`. Date format includes time when `include_datetime: true`, otherwise date only. Session lineage (parent session ID) only shown for sub-sessions spawned via the task tool.
## Contributing
> [!NOTE]
> This project is not currently accepting external contributions, but we're actively working toward opening this up. We value community input and look forward to collaborating in the future. For now, feel free to fork and experiment!
Most contributions require you to agree to a
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
the rights to use your contribution. For details, visit [Contributor License Agreements](https://cla.opensource.microsoft.com).
When you submit a pull request, a CLA bot will automatically determine whether you need to provide
a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions
provided by the bot. You will only need to do this once across all repos using our CLA.
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
## Trademarks
This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft
trademarks or logos is subject to and must follow
[Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/legal/intellectualproperty/trademarks/usage/general).
Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.
Any use of third-party trademarks or logos are subject to those third-party's policies.