43 lines
1.6 KiB
Bash
43 lines
1.6 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
client=
|
|
instruction=
|
|
home_path=${HOME:?HOME is required}
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--client) client=${2:?--client requires a value}; shift 2 ;;
|
|
--instruction) instruction=${2:?--instruction requires a value}; shift 2 ;;
|
|
--home) home_path=${2:?--home requires a value}; shift 2 ;;
|
|
*) printf 'Unknown argument: %s\n' "$1" >&2; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
case "$client" in
|
|
codex|Codex) targets=(codex) ;;
|
|
claude|Claude) targets=(claude) ;;
|
|
both|Both) targets=(codex claude) ;;
|
|
'')
|
|
read -r -p 'Select client (codex, claude, or both) ' client
|
|
case "$client" in
|
|
codex|Codex) targets=(codex) ;;
|
|
claude|Claude) targets=(claude) ;;
|
|
both|Both) targets=(codex claude) ;;
|
|
*) printf 'Unknown --client value: %s\n' "$client" >&2; exit 1 ;;
|
|
esac
|
|
;;
|
|
*) printf 'Unknown --client value: %s\n' "$client" >&2; exit 1 ;;
|
|
esac
|
|
if [ -z "$instruction" ]; then read -r -p 'Instruction ' instruction; fi
|
|
if [ -z "${instruction//[[:space:]]/}" ] || [ ${#instruction} -gt 65536 ]; then printf 'Instruction must contain between 1 and 65536 characters.\n' >&2; exit 1; fi
|
|
case "$home_path" in /*|[A-Za-z]:[\\/]*) ;; *) printf 'Home path must be absolute.\n' >&2; exit 1 ;; esac
|
|
|
|
directory="$home_path/.my-ai-configuration/instructions"
|
|
mkdir -p -- "$directory"
|
|
for target in "${targets[@]}"; do
|
|
path="$directory/$target.md"
|
|
[ ! -s "$path" ] || [ "$(tail -c 1 -- "$path" | wc -l)" -eq 1 ] || printf '\n' >> "$path"
|
|
printf '%s\n' "$instruction" >> "$path"
|
|
printf 'Instruction added for %s.\n' "$target"
|
|
done
|