Getting it into your agent
This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.
/plugin marketplace add IvanLutsenko/awac-ai-agent-plugins/plugin install plugin-cross-portWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/ivanlutsenko/awac-ai-agent-plugins/install-hook)<a href="https://agentmods.dev/commands/ivanlutsenko/awac-ai-agent-plugins/install-hook"><img src="https://agentmods.dev/badge/commands/ivanlutsenko/awac-ai-agent-plugins/install-hook/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/commands/ivanlutsenko/awac-ai-agent-plugins/install-hook"><img src="https://agentmods.dev/badge/commands/ivanlutsenko/awac-ai-agent-plugins/install-hook.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00013 | $0.01725 |
| Opus 5.5 | $0.00005 | $0.00690 |
| Sonnet 5.5 | $0.00003 | $0.00345 |
| Haiku 4.5 | $0.00001 | $0.00172 |
Grade A, and why
install-hook scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 174 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Install Hook
Installs the bidirectional plugin-cross-port pre-commit hook into a target git repository.
Arguments
/path/to/target-repo(optional) — defaults to current working directory
Steps
Step 1 — Resolve target repo
Use the argument if provided, otherwise use cwd.
Verify it's a git repo:
git -C <target> rev-parse --show-toplevel
If this fails: stop with "Not a git repository: ".
Step 2 — Get scripts path
Run to get the absolute path to the converter scripts:
echo "${CLAUDE_PLUGIN_ROOT}/scripts"
Store the result as SCRIPTS_DIR. This is the path that will be embedded in the generated hook.
Step 3 — Check for existing pre-commit hook
ls <target>/.githooks/pre-commit 2>/dev/null
If it exists: show the user the first 5 lines and ask:
"
.githooks/pre-commitalready exists in target repo. Overwrite?"
If they say no: stop.
Step 4 — Create .githooks dir
mkdir -p <target>/.githooks
Step 5 — Write hook
Write <target>/.githooks/pre-commit using the Write tool. Replace __SCRIPTS_DIR__ with the value from Step 2.
Hook content (substitute __SCRIPTS_DIR__ literally):
#!/bin/bash
# plugin-cross-port pre-commit hook
# Installed by /cross-port:install-hook — re-run after plugin updates
CC_TO_CODEX="__SCRIPTS_DIR__/convert_cc_to_codex.py"
CODEX_TO_CC="__SCRIPTS_DIR__/convert_codex_to_cc.py"
if [ ! -f "$CC_TO_CODEX" ] || [ ! -f "$CODEX_TO_CC" ]; then
echo "⚠️ plugin-cross-port: scripts not found. Re-run /cross-port:install-hook"
exit 0
fi
REPO_ROOT="$(git rev-parse --show-toplevel)"
CONFIG_FILE="$REPO_ROOT/.plugin-cross-port.config.yaml"
PLUGINS_DIR="plugins"
CODEX_MARKETPLACE=".agents/plugins/marketplace.json"
DEFAULT_SOT="claude-code"
if [ -f "$CONFIG_FILE" ]; then
val=$(grep '^plugins_dir:' "$CONFIG_FILE" | awk '{print $2}' | tr -d "'\"")
[ -n "$val" ] && PLUGINS_DIR="$val"
val=$(grep '^codex_marketplace:' "$CONFIG_FILE" | awk '{print $2}' | tr -d "'\"")
[ -n "$val" ] && CODEX_MARKETPLACE="$val"
val=$(grep '^default_source_of_truth:' "$CONFIG_FILE" | awk '{print $2}' | tr -d "'\"")
[ -n "$val" ] && DEFAULT_SOT="$val"
fi
CHANGED_PLUGINS=$(git diff --cached --name-only | grep "^$PLUGINS_DIR/" | cut -d/ -f1,2 | sort -u)
if [ -z "$CHANGED_PLUGINS" ]; then exit 0; fi
get_source_of_truth() {
local plugin="$1"; local sot=""
local df="$REPO_ROOT/$plugin/.plugin-cross-port.json"
[ -f "$df" ] && sot=$(grep '^source_of_truth:' "$df" | awk '{print $2}' | tr -d "'\"")
if [ -z "$sot" ]; then
local hc="$REPO_ROOT/$plugin/.claude-plugin/plugin.json"
local hd="$REPO_ROOT/$plugin/.codex-plugin/plugin.json"
if [ -f "$hc" ] && [ ! -f "$hd" ]; then sot="claude-code"
elif [ -f "$hd" ] && [ ! -f "$hc" ]; then sot="codex"
else sot="$DEFAULT_SOT"; fi
fi
echo "$sot"
}
run_cc_to_codex() {
local plugin="$1"
echo "plugin-cross-port: CC→Codex syncing $plugin"
python3 "$CC_TO_CODEX" "$plugin" --repo-root "$REPO_ROOT" --force || { echo "❌ CC→Codex failed for $plugin. Commit aborted."; exit 1; }
git add "$REPO_ROOT/$plugin/.codex-plugin/" "$REPO_ROOT/$plugin/skills/generated-from-commands/" "$REPO_ROOT/$plugin/.plugin-cross-port.json" "$REPO_ROOT/$CODEX_MARKETPLACE" 2>/dev/null || true
}
run_codex_to_cc() {
local plugin="$1"
echo "plugin-cross-port: Codex→CC syncing $plugin"
python3 "$CODEX_TO_CC" "$plugin" --repo-root "$REPO_ROOT" --force || { echo "❌ Codex→CC failed for $plugin. Commit aborted."; exit 1; }
git add "$REPO_ROOT/$plugin/.claude-plugin/" "$REPO_ROOT/$plugin/commands/generated-from-codex-"*.md "$REPO_ROOT/$plugin/.plugin-cross-port.json" 2>/dev/null || true
}
SYNCED=0
for PLUGIN in $CHANGED_PLUGINS; do
STAGED=$(git diff --cached --name-only | grep "^$PLUGIN/")
CC_CHANGED=$(echo "$STAGED" | grep -E "^$PLUGIN/(commands/[^/]+\.md|\.claude-plugin/)" | grep -v "generated-from-codex")
CODEX_CHANGED=$(echo "$STAGED" | grep "^$PLUGIN/\.codex-plugin/")
if [ -n "$CC_CHANGED" ] && [ -n "$CODEX_CHANGED" ]; then
SOT=$(get_source_of_truth "$PLUGIN")
echo "⚠️ plugin-cross-port: both sides staged in $PLUGIN — using source_of_truth=$SOT"
[ "$SOT" = "codex" ] && run_codex_to_cc "$PLUGIN" || run_cc_to_codex "$PLUGIN"
SYNCED=$((SYNCED + 1))
elif [ -n "$CC_CHANGED" ]; then
run_cc_to_codex "$PLUGIN"; SYNCED=$((SYNCED + 1))
elif [ -n "$CODEX_CHANGED" ]; then
run_codex_to_cc "$PLUGIN"; SYNCED=$((SYNCED + 1))
fi
done
[ $SYNCED -gt 0 ] && echo "✅ plugin-cross-port: $SYNCED plugin(s) synced"
exit 0
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 174 lines · 13 tokens per session scan A 620de875d99a
install-hook is a command published in the GitHub repository IvanLutsenko/awac-ai-agent-plugins (3 stars, last pushed 5d ago), licensed MIT. It adds 13 tokens to every session and 1,725 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-05.
Other commands, from other repositories
standup
Review my git commits from the past workday and generate a standup summary.
git
The pre-finish status: branch, hygiene findings, message checks, workflow lint, template state.
commit
A command that examines staged Git changes and proposes a commit message using the Conventional Commits format, such as feat, fix, or docs. Git is a tool for tracking changes to code.
git-workflow
Run review, tests, and commit steps, then prepare a pull request.
session-report
Capture what changed this session and why, scoped to the current branch. Read by ship verbs when synthesizing the commit message; deleted after a successful commit.
commit
Context-aware Git commit assistant with smart pre-commit checks.