🔧 Where my dotfiles lives in harmony and peace, most of the time

♻️ Move agent configs under agents

Changed files
+52 -373
agents
codex
prompts
skills
ask-questions-if-underspecified
duckdb
frontend-design
self-contained-python-script
youtube-videos
claude
codex
scripts
terminal
+3 -12
Makefile
··· 21 21 code: 22 22 @ $(DOTFILES)/code/setup.sh 23 23 24 - .PHONY: claude 25 - claude: 26 - @ command -v claude >/dev/null 2>&1 || curl -fsSL http://claude.ai/install.sh | bash 27 - @ mkdir -p "$(HOME)/.claude" 28 - @ ln -sf $(DOTFILES)/claude/settings.json "$(HOME)/.claude/settings.json" 29 - @ ln -sf $(DOTFILES)/claude/CLAUDE.md "$(HOME)/.claude/CLAUDE.md" 30 - @ ln -sfT $(DOTFILES)/claude/commands "$(HOME)/.claude/commands" 31 - @ ln -sfT $(DOTFILES)/claude/agents "$(HOME)/.claude/agents" 32 - 33 - .PHONY: codex 34 - codex: 35 - @ $(DOTFILES)/codex/setup.sh 24 + .PHONY: agents 25 + agents: 26 + @ $(DOTFILES)/agents/setup.sh 36 27 37 28 .PHONY: cursor 38 29 cursor:
+1 -1
README.md
··· 13 13 - **Terminal**: [Alacritty](https://github.com/alacritty/alacritty) 14 14 - **Theme**: [Catppuccin](https://github.com/catppuccin/catppuccin) (Frappe flavor) 15 15 - **Shell**: `zsh` with [Starship](https://starship.rs/) prompt and [Sheldon](https://sheldon.cli.rs/) plugin manager 16 - - **Coding**: VS Code and Claude Code 16 + - **Coding**: VS Code, Codex, and Pi 17 17 - **Note-taking**: VS Code with Foam Extension 18 18 19 19 ## 📦 Configuration
+47
agents/setup.sh
··· 1 + #!/usr/bin/env bash 2 + set -euo pipefail 3 + 4 + DOTFILES="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" 5 + AGENTS_DIR="${DOTFILES}/agents" 6 + CODEX_DIR="${HOME}/.codex" 7 + 8 + setup_codex() { 9 + paru -S --needed --noconfirm openai-codex-autoup-bin 10 + 11 + mkdir -p "${CODEX_DIR}" 12 + ln -sf "${AGENTS_DIR}/codex/config.toml" "${CODEX_DIR}/config.toml" 13 + ln -sf "${AGENTS_DIR}/AGENTS.md" "${CODEX_DIR}/AGENTS.md" 14 + ln -sfT "${AGENTS_DIR}/prompts" "${CODEX_DIR}/prompts" 15 + ln -sfT "${AGENTS_DIR}/skills" "${CODEX_DIR}/skills" 16 + } 17 + 18 + setup_pi() { 19 + npm install -g @mariozechner/pi-coding-agent 20 + } 21 + 22 + usage() { 23 + echo "Usage: $(basename "$0") [codex|pi|all]" >&2 24 + exit 1 25 + } 26 + 27 + if [[ $# -gt 1 ]]; then 28 + usage 29 + fi 30 + 31 + if [[ $# -eq 0 ]] || [[ $1 == "all" ]]; then 32 + setup_codex 33 + setup_pi 34 + exit 0 35 + fi 36 + 37 + if [[ $1 == "codex" ]]; then 38 + setup_codex 39 + exit 0 40 + fi 41 + 42 + if [[ $1 == "pi" ]]; then 43 + setup_pi 44 + exit 0 45 + fi 46 + 47 + usage
-1
claude/CLAUDE.md
··· 1 - ../codex/AGENTS.md
-140
claude/commands/commit.md
··· 1 - --- 2 - allowed-tools: Bash(git add:*), Bash(git status:*), Bash(git commit:*), Bash(git diff:*), Bash(git log:*) 3 - description: Create well-formatted commits with the conventional commits style mixed with emoji (gitmoji). 4 - --- 5 - 6 - # Commit 7 - 8 - ## Context 9 - 10 - - Current git status: !`git status` 11 - - Current git diff (staged and unstaged changes): !`git diff HEAD` 12 - - Current branch: !`git branch --show-current` 13 - - Recent commits: !`git log --oneline -40` 14 - 15 - ## Goal 16 - 17 - Create well-formatted commits with the conventional commits style mixed with emoji (gitmoji). 18 - 19 - 1. Checks which files are staged with `git status`. 20 - 2. Check historical commits to learn style and tone (`git log --oneline -40`). 21 - 3. Analyze the diff to determine if multiple distinct logical changes are present. 22 - 4. If multiple distinct changes are detected, break the commit into multiple smaller commits. 23 - 5. For each commit (or the single commit if not split), create a commit message using the commit convention. 24 - 1. Add all relevant changes with `git add`. 25 - 2. Performs a `git diff` to understand what actual changes are being committed 26 - 3. Write the descriptive and concise commit message. 27 - 28 - ## Commit Style 29 - 30 - - **Atomic commits**: Each commit should contain related changes that serve a single purpose. 31 - - **Split large changes**: If changes touch multiple concerns, split them into separate commits. Always reviews the commit diff to ensure the message matches the changes 32 - - **Concise first line**: Keep the first line under 72 characters. Do not end the subject line with a period. 33 - - **Present tense, imperative mood**: Use the imperative mood in the subject line. 34 - - **Conventional commit format**: Use the format `<emoji> <description>`. 35 - 36 - ### Emoji Inspiration 37 - 38 - - 🎨 Improve structure / format of the code 39 - - ⚡️ Improve performance 40 - - 🔥 Remove code or files 41 - - 🐛 Fix a bug 42 - - 🚑️ Critical hotfix 43 - - ✨ Introduce new features 44 - - 📝 Add or update documentation 45 - - 🚀 Deploy stuff 46 - - 💄 Add or update the UI and style files 47 - - 🎉 Begin a project 48 - - ✅ Add, update, or pass tests 49 - - 🔒️ Fix security or privacy issues 50 - - 🔐 Add or update secrets 51 - - 🔖 Release / Version tags 52 - - 🚨 Fix compiler / linter warnings 53 - - 🚧 Work in progress 54 - - 💚 Fix CI Build 55 - - ⬇️ Downgrade dependencies 56 - - ⬆️ Upgrade dependencies 57 - - 📌 Pin dependencies to specific versions 58 - - 👷 Add or update CI build system 59 - - 📈 Add or update analytics or track code 60 - - ♻️ Refactor code 61 - - ➕ Add a dependency 62 - - ➖ Remove a dependency 63 - - 🔧 Add or update configuration files 64 - - 🔨 Add or update development scripts 65 - - 🌐 Internationalization and localization 66 - - ✏️ Fix typos 67 - - 💩 Write bad code that needs to be improved 68 - - ⏪️ Revert changes 69 - - 🔀 Merge branches 70 - - 📦️ Add or update compiled files or packages 71 - - 👽️ Update code due to external API changes 72 - - 🚚 Move or rename resources (e.g.: files, paths, routes) 73 - - 📄 Add or update license 74 - - 💥 Introduce breaking changes 75 - - 🍱 Add or update assets 76 - - ♿️ Improve accessibility 77 - - 💡 Add or update comments in source code 78 - - 🍻 Write code drunkenly 79 - - 💬 Add or update text and literals 80 - - 🗃️ Perform database related changes 81 - - 🔊 Add or update logs 82 - - 🔇 Remove logs 83 - - 👥 Add or update contributor(s) 84 - - 🚸 Improve user experience / usability 85 - - 🏗️ Make architectural changes 86 - - 📱 Work on responsive design 87 - - 🤡 Mock things 88 - - 🥚 Add or update an easter egg 89 - - 🙈 Add or update a .gitignore file 90 - - 📸 Add or update snapshots 91 - - ⚗️ Perform experiments 92 - - 🔍️ Improve SEO 93 - - 🏷️ Add or update types 94 - - 🌱 Add or update seed files 95 - - 🚩 Add, update, or remove feature flags 96 - - 🥅 Catch errors 97 - - 💫 Add or update animations and transitions 98 - - 🗑️ Deprecate code that needs to be cleaned up 99 - - 🛂 Work on code related to authorization, roles and permissions 100 - - 🩹 Simple fix for a non-critical issue 101 - - 🧐 Data exploration/inspection 102 - - ⚰️ Remove dead code 103 - - 🧪 Add a failing test 104 - - 👔 Add or update business logic 105 - - 🩺 Add or update healthcheck 106 - - 🧱 Infrastructure related changes 107 - - 🧑‍💻 Improve developer experience 108 - - 💸 Add sponsorships or money related infrastructure 109 - - 🧵 Add or update code related to multithreading or concurrency 110 - - 🦺 Add or update code related to validation 111 - - ✈️ Improve offline support 112 - 113 - ## Guidelines for Splitting Commits 114 - 115 - When analyzing the diff, consider splitting commits based on these criteria: 116 - 117 - 1. **Different concerns**: Changes to unrelated parts of the codebase 118 - 2. **Different types of changes**: Mixing features, fixes, refactoring, etc. 119 - 3. **File patterns**: Changes to different types of files (e.g., source code vs documentation) 120 - 4. **Logical grouping**: Changes that would be easier to understand or review separately 121 - 5. **Size**: Very large changes that would be clearer if broken down 122 - 123 - ## Examples 124 - 125 - - ✨ Add user authentication system 126 - - 🐛 Resolve memory leak in rendering process 127 - - 📝 Update API documentation with new endpoints 128 - - ♻️ Simplify error handling logic in parser 129 - - 🚨 Resolve linter warnings in component files 130 - - 🧑‍💻 Improve developer tooling setup process 131 - - 👔 Implement business logic for transaction validation 132 - - 🩹 Address minor styling inconsistency in header 133 - - 🚑️ Patch critical security vulnerability in auth flow 134 - - 🎨 Reorganize component structure for better readability 135 - - 🔥 Remove deprecated legacy code 136 - - 🦺 Add input validation for user registration form 137 - - 💚 Resolve failing CI pipeline tests 138 - - 📈 Implement analytics tracking for user engagement 139 - - 🔒️ Strengthen authentication password requirements 140 - - ♿️ Improve form accessibility for screen readers
-42
claude/commands/plan.md
··· 1 - # Plan 2 - 3 - Create clear, actionable, and efficient plans. 4 - 5 - 1. **Clarify First** 6 - - Ask targeted questions to understand the goal, constraints, and success criteria 7 - - Identify any ambiguities or assumptions that need validation 8 - - Confirm the scope and boundaries of the task 9 - 10 - 2. **Optimize for Simplicity** 11 - - Start with the minimal viable solution 12 - - Check if the goal can be achieved by modifying existing solutions 13 - - Consider if anything can be removed rather than added 14 - - Prefer straightforward approaches over complex ones 15 - 16 - 3. **Break Down into Atomic Steps** 17 - - Decompose the task into small, independent, testable units 18 - - Each step should have a clear input, action, and output 19 - - Steps should be executable in isolation when possible 20 - - Include verification/testing criteria for each step 21 - 22 - 4. **Structure Your Plan** 23 - - Prerequisites: What needs to be in place before starting 24 - - Steps: Numbered, actionable tasks with clear outcomes 25 - - Dependencies: Which steps rely on others 26 - - Checkpoints: Where to verify progress and adjust if needed 27 - - Success Criteria: How to know when the plan is complete 28 - 29 - 5. **Consider Edge Cases** 30 - - What could go wrong at each step? 31 - - What are the fallback options? 32 - - Where might iterations be needed? 33 - 34 - ## Output Format 35 - 36 - Present your plan as: 37 - 1. Goal Statement (one clear sentence) 38 - 2. Clarifying Questions (if any) 39 - 3. Prerequisites 40 - 4. Step-by-Step Plan (numbered, with sub-steps as needed) 41 - 5. Success Metrics 42 - 6. Potential Risks & Mitigations
-23
claude/commands/question.md
··· 1 - # Question 2 - 3 - Answer user questions directly and accurately. Focus on providing information. Use all the tools you need but don't make any changes (code or system). 4 - 5 - ## Process 6 - 7 - 1. **Parse the question**: Identify the core question and any sub-questions 8 - 2. **Gather context**: Use search tools to find relevant resources (online and local). Ask clarifying questions if the question is ambiguous or need more details 9 - 3. **Analyze systematically**: Consider multiple perspectives, edge cases, and potential blind spots 10 - 4. **Respond with specifics**: Give concrete answers and actionable next steps. Discuss trade-offs, which you prefer, ... 11 - 12 - ## Response Format 13 - 14 - - Start with a direct answer (1-2 sentences) 15 - - Provide supporting details with specific references (`file:line`) 16 - - End with concrete next steps if applicable 17 - - Keep total response under 10 lines unless complexity requires more 18 - 19 - ## Constraints 20 - 21 - - No file modifications or system changes 22 - - Prioritize accuracy over speed 23 - - Push back on unclear or impossible requests
-23
claude/commands/simplify.md
··· 1 - # Simplify 2 - 3 - Refactor code (#$ARGUMENTS) to be simpler while maintaining identical functionality. Simple code is easier to understand, change, debug and more flexible, not just shorter. 4 - 5 - ## Steps 6 - 7 - 1. **Analyze** - Understand purpose, identify edge cases 8 - 2. **Remove** - Dead code, unused variables, redundant operations 9 - 3. **Simplify** - Complex conditionals, verbose constructs, unnecessary state 10 - 4. **Restructure** - Extract common code, flatten nesting, use early returns 11 - 5. **Verify** - Test that behavior remains identical 12 - 13 - ## Focus Areas 14 - 15 - - Replace custom implementations with built-ins 16 - - Combine similar functions 17 - - Use clearest variable/function names 18 - - Apply KISS principle 19 - 20 - ## Constraints 21 - 22 - - MUST produce identical outputs for all inputs 23 - - MUST maintain same public API/interface
-26
claude/settings.json
··· 1 - { 2 - "includeCoAuthoredBy": false, 3 - "permissions": { 4 - "allow": [ 5 - "Bash(git:*)", 6 - "Bash(python:*)", 7 - "Bash(uv run:*)", 8 - "Bash(ls:*)", 9 - "Bash(make:*)", 10 - "Bash(mkdir:*)", 11 - "Bash(cat:*)", 12 - "Bash(cp:*)", 13 - "Bash(find:*)", 14 - "Bash(rg:*)", 15 - "Bash(grep:*)", 16 - "Bash(time:*)", 17 - "Bash(gh:*)", 18 - "Edit(**)", 19 - "WebFetch(domain:github.com)", 20 - "WebFetch(domain:raw.githubusercontent.com)", 21 - "WebFetch(domain:*)" 22 - ], 23 - "deny": [] 24 - }, 25 - "alwaysThinkingEnabled": true 26 - }
codex/.gitignore agents/.gitignore
codex/AGENTS.md agents/AGENTS.md
-2
codex/agents/.gitignore
··· 1 - auth.json 2 - **/sessions/
-22
codex/agents/cdx-weaver/AGENTS.md
··· 1 - You are an expert note-linker and synthesizer. Your job is to enrich the given text with relevant ideas, insights, learnings and key points from a collection of markdown notes. You connect ideas across notes and integrate them seamlessly into writing. 2 - 3 - ## Instructions 4 - 5 - 1. Read the text carefully understanding the different areas and topics it touchees. 6 - 2. List all Handbook notes using `find ~/projects/handbook/ -name "*.md" -exec basename {} \;`. 7 - 3. Read all relevant notes that might contain useful information given the text. 8 - 4. Search for relevant keywords across the notes to discover other potentially interesting notes. 9 - 5. Integrate the information into the text while preserving tone, structure, and intent. 10 - 6. Output the revised text in a code block. 11 - 7. Output an idea list with learnings and key points from the notes that might apply to the text but were not included. 12 - 13 - Don't make any edits to handbook notes or other files. Avoid fluff and unnecessary changes. 14 - 15 - ### Examples 16 - 17 - - If the text describes a system, consult the `Systems.md` note and ensure key design principles are included or surfaced in the list. 18 - - If the text is about solving a problem, consult the Problem Solving note and check it follows those practices. 19 - 20 - ## Goal 21 - 22 - Augment the provided text with any valuable ideas, principles, insights, and learnings found in the Handbook notes.
-11
codex/agents/cdx-weaver/config.toml
··· 1 - model = "gpt-5.1" 2 - model_reasoning_effort = "high" 3 - approval_policy = "never" 4 - sandbox_mode = "read-only" 5 - project_doc_max_bytes = 0 6 - project_doc_fallback_filenames = [] 7 - 8 - [features] 9 - unified_exec = true 10 - streamable_shell = true 11 - web_search_request = true
codex/config.toml agents/codex/config.toml
codex/prompts/commit.md agents/prompts/commit.md
codex/prompts/simplify.md agents/prompts/simplify.md
-14
codex/setup.sh
··· 1 - #!/usr/bin/env bash 2 - set -euo pipefail 3 - 4 - DOTFILES=$(dirname "$(dirname "$(realpath "$0")")") 5 - CODEX_DIR="${HOME}/.codex" 6 - 7 - paru -S --needed --noconfirm openai-codex-autoup-bin 8 - 9 - mkdir -p "${CODEX_DIR}" 10 - 11 - ln -sf "${DOTFILES}/codex/config.toml" "${CODEX_DIR}/config.toml" 12 - ln -sf "${DOTFILES}/codex/AGENTS.md" "${CODEX_DIR}/AGENTS.md" 13 - ln -sfT "${DOTFILES}/codex/prompts" "${CODEX_DIR}/prompts" 14 - ln -sfT "${DOTFILES}/codex/skills" "${CODEX_DIR}/skills"
codex/skills/ask-questions-if-underspecified/SKILL.md agents/skills/ask-questions-if-underspecified/SKILL.md
codex/skills/duckdb/SKILL.md agents/skills/duckdb/SKILL.md
codex/skills/frontend-design/SKILL.md agents/skills/frontend-design/SKILL.md
codex/skills/self-contained-python-script/SKILL.md agents/skills/self-contained-python-script/SKILL.md
codex/skills/youtube-videos/SKILL.md agents/skills/youtube-videos/SKILL.md
-55
scripts/cdx-weaver
··· 1 - #!/usr/bin/env bash 2 - 3 - set -euo pipefail 4 - 5 - REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" 6 - AGENT_DIR="${REPO_ROOT}/codex/agents/cdx-weaver" 7 - 8 - if [[ ! -d $AGENT_DIR ]]; then 9 - echo "Error: agent directory not found at $AGENT_DIR" >&2 10 - exit 1 11 - fi 12 - 13 - usage() { 14 - echo "Usage: $(basename "$0") [file|-] (reads stdin when no file is provided or when using '-')" >&2 15 - exit 1 16 - } 17 - 18 - if (( $# > 1 )); then 19 - usage 20 - fi 21 - 22 - if (( $# == 1 )) && [[ $1 != "-" ]]; then 23 - if [[ ! -f $1 ]]; then 24 - echo "Error: file not found: $1" >&2 25 - exit 1 26 - fi 27 - CONTENT=$(cat "$1") 28 - else 29 - if [ -t 0 ]; then 30 - usage 31 - fi 32 - CONTENT=$(cat) 33 - fi 34 - 35 - if [[ -z "${CONTENT//[[:space:]]/}" ]]; then 36 - echo "Error: no input provided" >&2 37 - exit 1 38 - fi 39 - 40 - # Wrap the content in XML tags 41 - PROMPT=$(cat <<EOF 42 - Enhance any given text by enriching it with relevant insights drawn from the Handbook notes. 43 - 44 - <text> 45 - ${CONTENT} 46 - </text> 47 - EOF 48 - ) 49 - 50 - # Run Codex in exec mode 51 - env CODEX_HOME="$AGENT_DIR" \ 52 - codex exec \ 53 - --skip-git-repo-check \ 54 - --color=never \ 55 - "$PROMPT"
+1 -1
terminal/zshrc
··· 66 66 67 67 # Functions 68 68 aigcm() { 69 - tmux new-session -d -s "aigcm-$(date +%s)" "codex exec - < $HOME/projects/dotfiles/codex/prompts/commit.md" 69 + tmux new-session -d -s "aigcm-$(date +%s)" "codex exec - < $HOME/projects/dotfiles/agents/prompts/commit.md" 70 70 } 71 71 72 72 qgs() {