From 78ed3bde7fb49d5d1c846e7aa0704cb2a142863c Mon Sep 17 00:00:00 2001 From: shokollm <270575765+shokollm@users.noreply.github.com> Date: Thu, 2 Apr 2026 14:29:16 +0000 Subject: [PATCH] fix(kugetsu): init creates base session in ~/.kugetsu-worktrees and adds context to forked sessions 1. Init: cd to ~/.kugetsu-worktrees before creating base session This keeps all worktrees inside a predictable directory structure and avoids external_directory permission issues 2. Fork context: Add kugetsu_get_fork_context() that provides: - Important working rules (stop on error, don't pivot) - Repository configuration from repos.json - Environment file location info 3. Fork message: Prepend context to user message when forking session --- skills/kugetsu/scripts/kugetsu | 58 +++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 5 deletions(-) diff --git a/skills/kugetsu/scripts/kugetsu b/skills/kugetsu/scripts/kugetsu index dfe422d..c06c55b 100755 --- a/skills/kugetsu/scripts/kugetsu +++ b/skills/kugetsu/scripts/kugetsu @@ -394,6 +394,41 @@ kugetsu_get_pm_context() { fi } +kugetsu_get_fork_context() { + local issue_ref="$1" + local context="" + + context="## IMPORTANT WORKING RULES + +1. You are working on issue: $issue_ref +2. If you encounter ANY error, blocker, or cannot complete the task: + - STOP immediately + - Log what happened and why you cannot proceed + - Do NOT switch to other work or try alternative approaches +3. Do NOT work on other issues or PRs unless explicitly asked +4. Environment variables are available in ~/.kugetsu/env/ + +" + + if [ -f "$REPOS_CONFIG" ]; then + context="${context} +## REPOSITORIES CONFIG +$(cat "$REPOS_CONFIG") + +" + fi + + if [ -f "$ENV_DIR/default.env" ]; then + context="${context} +## ENVIRONMENT (available at ~/.kugetsu/env/) +Environment file exists at: $ENV_DIR/default.env +Source it with: source ~/.kugetsu/env/default.env +" + fi + + echo "$context" +} + kugetsu_add_notification() { local type="$1" local message="$2" @@ -1107,12 +1142,19 @@ EOF exit 1 fi + local init_worktree_dir="$HOME/.kugetsu-worktrees" + mkdir -p "$init_worktree_dir" + cd "$init_worktree_dir" + echo "Initialized kugetsu worktrees directory: $init_worktree_dir" + echo "Base session will be created in this directory." + echo "" + local cwd_files=$(ls -A "$PWD" 2>/dev/null | wc -l) local cwd_git=$(git rev-parse --is-inside-work-tree 2>/dev/null || echo "false") if [ "$cwd_files" -gt 0 ] || [ "$cwd_git" = "true" ]; then - echo "Warning: Current directory is not empty: $PWD" >&2 + echo "Warning: Worktrees directory is not empty: $PWD" >&2 echo "This may cause project context to contaminate the base session." >&2 - echo "Consider running kugetsu init from an empty directory." >&2 + echo "Consider running kugetsu destroy --base -y and reinitializing." >&2 echo "" >&2 echo "Files in current directory: $cwd_files" >&2 if [ "$cwd_git" = "true" ]; then @@ -1257,13 +1299,19 @@ cmd_start() { local opencode_db="${OPENCODE_DB:-$HOME/.local/share/opencode/opencode.db}" > "$fork_log" - + + local fork_context=$(kugetsu_get_fork_context "$issue_ref") + local full_message="${fork_context} + +## YOUR TASK +$message" + fix_session_permissions if [ "$DEBUG_MODE" = true ]; then - (cd "$worktree_path" && opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1) | tee "$fork_log" & + (cd "$worktree_path" && opencode run "$full_message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1) | tee "$fork_log" & else - (cd "$worktree_path" && opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1) >> "$fork_log" & + (cd "$worktree_path" && opencode run "$full_message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1) >> "$fork_log" & fi local fork_pid=$!