+3
-12
Makefile
+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
+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
+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
claude/CLAUDE.md
···
1
-
../codex/AGENTS.md
-140
claude/commands/commit.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
-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
-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
-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
-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/.gitignore
agents/.gitignore
codex/AGENTS.md
agents/AGENTS.md
codex/AGENTS.md
agents/AGENTS.md
-22
codex/agents/cdx-weaver/AGENTS.md
-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
-11
codex/agents/cdx-weaver/config.toml
codex/config.toml
agents/codex/config.toml
codex/config.toml
agents/codex/config.toml
codex/prompts/commit.md
agents/prompts/commit.md
codex/prompts/commit.md
agents/prompts/commit.md
codex/prompts/simplify.md
agents/prompts/simplify.md
codex/prompts/simplify.md
agents/prompts/simplify.md
-14
codex/setup.sh
-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/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/duckdb/SKILL.md
agents/skills/duckdb/SKILL.md
codex/skills/frontend-design/SKILL.md
agents/skills/frontend-design/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/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
codex/skills/youtube-videos/SKILL.md
agents/skills/youtube-videos/SKILL.md
-55
scripts/cdx-weaver
-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
+1
-1
terminal/zshrc