Unix Goto Development

manutej/luxor-claude-marketplace/plugins/luxor-specialized-tools/skills/unix-goto-development

作者 manutej1861cc9720d5无许可证62 个星标收录于 2026年10月8日更新于 2026年10月8日仓库3个月前更新

Expert guidance for unix-goto shell navigation tool development, including architecture, 9-step feature workflow, testing (100% coverage), performance optimization (<100ms targets), and Linear issue integration

AI 生成的概览

指导 unix-goto 命令行导航工具的开发:架构、九步功能流程、测试与性能目标。

功能
该技能为 unix-goto 命令行导航系统提供开发指导,涵盖模块架构、缓存、书签与历史子系统以及加载顺序。它给出从规划、创建模块、接入加载器、编写测试、编写 API 与用户文档、性能验证到提交的九步功能开发流程。它还规定了测试要求(如 100% 覆盖率)和性能目标(如缓存导航低于 100 毫秒)。
适用场景
在为 unix-goto 导航工具新增功能时使用,例如书签、历史记录或基于缓存的导航命令。它也适用于编写测试套件、编写 shell 模块 API 文档,以及按既定目标验证导航性能。
运行要求
仅为说明性内容,不附带脚本。假定在 unix-goto 代码库中工作,需要 bash、git,并能访问该项目的 Linear 问题跟踪系统以更新问题。

unix-goto Development Expert

Comprehensive development expertise for the unix-goto shell navigation system - a high-performance Unix navigation tool with natural language support, sub-100ms cached navigation, and 100% test coverage.

When to Use This Skill

Use this skill when:

  • Developing new features for unix-goto shell navigation system
  • Implementing cache-based navigation optimizations
  • Adding bookmarks, history, or navigation commands
  • Following the standard 9-step feature addition workflow
  • Integrating with Linear project management
  • Writing comprehensive test suites (100% coverage required)
  • Optimizing performance to meet <100ms targets
  • Creating API documentation for shell modules
  • Debugging navigation or cache issues

Do NOT use this skill for:

  • General bash scripting (use generic bash skills)
  • Non-navigation shell tools
  • Projects without performance requirements
  • Simple one-off shell scripts

Project Overview

unix-goto System Architecture

unix-goto is a high-performance Unix navigation system designed with five core principles:

  1. Simple - ONE-line loading (source goto.sh), minimal configuration
  2. Fast - Sub-100ms navigation performance
  3. Lean - No bloat, no unnecessary dependencies
  4. Tested - 100% test coverage for core features
  5. Documented - Clear, comprehensive documentation

Key Performance Metrics

MetricTargetAchievedStatus
Cached navigation<100ms26ms✅ Exceeded
Cache hit rate>90%92-95%✅ Exceeded
Speedup ratio20-50x8x⏳ On track
Test coverage100%100%✅ Met
Cache build time<5s3-5s✅ Met

System Architecture

┌─────────────────────────────────────────────────────────────┐│                      User Interface                         ││  goto, bookmark, recent, back, goto list, goto benchmark   │└─────────────────────────────────────────────────────────────┘                            │                            ▼┌─────────────────────────────────────────────────────────────┐│                    Core Navigation                          ││  goto-function.sh - Main routing and path resolution        │└─────────────────────────────────────────────────────────────┘                            │          ┌─────────────────┼─────────────────┐          ▼                 ▼                 ▼┌──────────────────┐ ┌──────────────┐ ┌──────────────────┐│  Cache System    │ │  Bookmarks   │ │  History         ││  cache-index.sh  │ │  bookmark-   │ │  history-        ││                  │ │  command.sh  │ │  tracking.sh     ││  O(1) lookup     │ │              │ │                  ││  Auto-refresh    │ │  Add/Remove  │ │  Track visits    │└──────────────────┘ └──────────────┘ └──────────────────┘

Module Dependencies

Critical Load Order (dependencies must load before dependents):

goto.sh (loader)  ├── history-tracking.sh (no dependencies)  ├── back-command.sh (depends on: history-tracking.sh)  ├── recent-command.sh (depends on: history-tracking.sh)  ├── bookmark-command.sh (no dependencies)  ├── cache-index.sh (no dependencies)  ├── list-command.sh (depends on: bookmark-command.sh)  ├── benchmark-command.sh (depends on: cache-index.sh)  ├── benchmark-workspace.sh (no dependencies)  └── goto-function.sh (depends on: all above)

Core Knowledge

The 9-Step Feature Addition Workflow

This is the STANDARD process for adding any feature to unix-goto. Follow ALL nine steps.

Step 1: Plan Your Feature

Before writing ANY code, answer these questions:

Planning Questions:

  • What problem does this solve?
  • What's the user interface (commands/flags)?
  • What's the expected performance?
  • What dependencies exist?
  • What tests are needed?
  • What documentation is required?

Planning Template:

Feature: [Name]Problem: [User pain point]Interface: [Commands/flags]Performance: [Target metrics]Dependencies: [Module dependencies]Tests: [Test scenarios]Docs: [API.md, README.md sections]

Example - Recent Directories Feature (CET-77):

Feature: Recent Directories CommandProblem: Users can't quickly revisit recently navigated directoriesInterface: goto recent [n]Performance: <10ms for history retrievalDependencies: history-tracking.shTests:  - List recent directories  - Handle empty history  - Limit to N entries  - Navigate to recent directory by numberDocs: Add to API.md and README.md
Step 2: Create Module (if needed)

Module Template:

bash
#!/bin/bash# unix-goto - [Module purpose]# https://github.com/manutej/unix-goto
# Storage locationGOTO_MODULE_FILE="${GOTO_MODULE_FILE:-$HOME/.goto_module}"
# Main functiongoto_module() {    local subcommand="$1"    shift
    case "$subcommand" in        list)            # Implementation            ;;        add)            # Implementation            ;;        --help|-h|help|"")            echo "goto module - [Description]"            echo ""            echo "Usage:"            echo "  goto module list     [Description]"            echo "  goto module add      [Description]"            ;;        *)            echo "Unknown command: $subcommand"            return 1            ;;    esac}

Key Module Patterns:

  1. Function Naming:

    • Public functions: no prefix (goto, bookmark, recent)
    • Internal functions: double underscore (__goto_navigate_to, __goto_cache_lookup)
    • Variables: UPPERCASE for globals, lowercase for locals
  2. Environment Variables:

    bash
    # Always provide defaultsGOTO_INDEX_FILE="${GOTO_INDEX_FILE:-$HOME/.goto_index}"GOTO_CACHE_TTL="${GOTO_CACHE_TTL:-86400}"GOTO_SEARCH_DEPTH="${GOTO_SEARCH_DEPTH:-3}"
  3. Return Codes:

    • 0 - Success
    • 1 - General error (not found, invalid input)
    • 2 - Multiple matches found (cache lookup only)
Step 3: Add to Loader

Edit goto.sh to load your module in the correct dependency order:

bash
# Add to load sequence (respect dependencies)source "$GOTO_LIB_DIR/history-tracking.sh"source "$GOTO_LIB_DIR/module.sh"  # NEW - add after dependenciessource "$GOTO_LIB_DIR/back-command.sh"

Dependency Rules:

  • Modules with no dependencies load first
  • Modules depending on others load AFTER dependencies
  • Main goto-function.sh loads LAST (depends on everything)
Step 4: Integrate with Main Function

Edit lib/goto-function.sh to route commands to your module:

bash
goto() {    case "$1" in        module)  # NEW            if command -v goto_module &> /dev/null; then                shift                goto_module "$@"            else                echo "⚠️  Module command not loaded"            fi            return            ;;    esac}
Step 5: Add Tests (100% Coverage Required)

Test File Template:

bash
#!/bin/bash# Test suite for [feature] functionality
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"source "$SCRIPT_DIR/lib/module.sh"
# Test countersTESTS_PASSED=0TESTS_FAILED=0
# Test helperpass() {    echo "✓ PASS: $1"    ((TESTS_PASSED++))}
fail() {    echo "✗ FAIL: $1"    ((TESTS_FAILED++))}
# Test 1: [Description]test_feature() {    # Arrange    local input="test"
    # Act    local result=$(function_under_test "$input")
    # Assert    if [[ "$result" == "expected" ]]; then        pass "Feature works"    else        fail "Feature failed: got '$result'"    fi}
# Run teststest_feature
# Summaryecho ""echo "Tests passed: $TESTS_PASSED"echo "Tests failed: $TESTS_FAILED"
[ $TESTS_FAILED -eq 0 ] && exit 0 || exit 1

Test Categories (ALL Required):

  1. Unit Tests - Test individual functions
  2. Integration Tests - Test module interaction
  3. Edge Cases - Test boundary conditions
  4. Performance Tests - Validate speed requirements

Example from CET-77 (Recent Directories):

bash
# Unit testtest_get_recent_dirs() {    result=$(__goto_recent_dirs 5)    [ $? -eq 0 ] && pass "Get recent dirs" || fail "Get recent dirs failed"}
# Integration testtest_goto_recent_navigation() {    goto recent 1    [ $? -eq 0 ] && pass "Navigate to recent dir" || fail "Navigation failed"}
# Edge casetest_empty_history() {    rm -f ~/.goto_history    result=$(goto recent)    [[ "$result" == *"No history"* ]] && pass "Empty history" || fail "Empty history check"}
# Performance testtest_recent_speed() {    start=$(date +%s%N)    __goto_recent_dirs 10    end=$(date +%s%N)    duration=$(((end - start) / 1000000))    [ $duration -lt 10 ] && pass "Recent dirs <10ms" || fail "Too slow: ${duration}ms"}
Step 6: Document API

Add to docs/API.md:

markdown
## Module API
### `goto module`
[Description of what the module does]
**Signature:**```bashgoto module <subcommand>

Subcommands:

  • list - [Description]
  • add - [Description]

Performance: [Target metrics]

Examples:

bash
goto module listgoto module add value

Return Codes:

  • 0 - Success
  • 1 - Error

Implementation: lib/module.sh


**Example from CET-77:**```markdown## Recent Directories
### `goto recent [n]`
Display recently navigated directories in reverse chronological order.
**Signature:**```bashgoto recent [n]

Parameters:

  • n - Optional number of recent directories to display (default: all)

Performance: <10ms for history retrieval

Examples:

bash
goto recent        # Show all recent directoriesgoto recent 5      # Show 5 most recent

Implementation: lib/recent-command.sh


#### Step 7: Update User Documentation
Add to `README.md`:
```markdown### Module
[User-facing description]
```bashgoto module list    # [Description]goto module add     # [Description]

#### Step 8: Performance Validation
Validate performance meets targets:
```bash# Add benchmark if performance-criticalgoto benchmark module 10
# Measure overheadtime goto_module list
# Expected: <100ms for navigation, <10ms for lookups

Performance Targets:

  • Cached navigation: <100ms
  • Bookmark lookup: <10ms
  • Cache speedup: >20x
  • Cache hit rate: >90%
  • Cache build: <5s
Step 9: Linear Issue Update & Commit

Update Linear Issue:

  • Add implementation comment
  • Include test results
  • Include performance metrics
  • Link to commit
  • Move to "Complete"

Commit Format:

bash
git commit -m "feat: implement module feature (CET-XX)
[Detailed explanation]
Features:- Feature 1- Feature 2
Performance:- Metric: value
Tests:- X/X tests passing- 100% coverage
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>"

Commit Types:

  • feat: - New feature
  • fix: - Bug fix
  • perf: - Performance improvement
  • refactor: - Code refactoring
  • test: - Add or update tests
  • docs: - Documentation only
  • chore: - Build, dependencies, or tooling

Example Commit from CET-85:

feat: implement comprehensive benchmark suite (CET-85)
Implement complete benchmark framework with 5 benchmark tests, helpers,workspace generation, and CSV results storage.
Features:- 5 benchmark tests: cached vs uncached, multi-level paths, max depth,  cache build performance, parallel navigation- Benchmark helpers library with timing, stats, workspace management- CSV results storage in ~/.goto_benchmarks/- Performance target assertions (<100ms navigation)- Comprehensive statistical analysis (min/max/mean/median/stddev)
Performance:- Cached navigation: 26ms (target: <100ms) ✓- Cache build: 3-5s (target: <5s) ✓- Speedup ratio: 8x (target: >20x, in progress)
Tests:- 5/5 benchmark tests passing- All performance targets met for Phase 1
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>

Feature Checklist

Before submitting ANY feature:

  • Implementation complete
  • Loaded in goto.sh
  • Integrated with main goto function
  • Tests written and passing (100% coverage)
  • API documented in docs/API.md
  • User documentation updated in README.md
  • Performance validated (if applicable)
  • Linear issue updated with results
  • Committed with proper message format

Cache System Architecture

Purpose: O(1) folder lookup with automatic refresh

Implementation: lib/cache-index.sh

Key Components:

  • __goto_cache_build - O(n) index building
  • __goto_cache_lookup - O(1) hash table lookup
  • __goto_cache_is_valid - TTL-based validation
  • Auto-refresh on stale cache (24-hour TTL)

Cache File Format:

# unix-goto folder index cache# Version: 1.0# Built: 1697558122# Depth: 3# Format: folder_name|full_path|depth|last_modified#---unix-goto|/Users/manu/Documents/LUXOR/Git_Repos/unix-goto|8|1697558100GAI-3101|/Users/manu/Documents/LUXOR/PROJECTS/GAI-3101|6|1697558050

Performance:

  • Build time: O(n) - 3-5s for 1200+ folders
  • Lookup time: O(1) - <100ms target, 26ms actual
  • Storage: ~42KB for 487 folders

Cache Lookup Return Codes:

bash
__goto_cache_lookup "folder"# Returns:#   0 - Single match found (path to stdout)#   1 - Not found in cache#   2 - Multiple matches found (all paths to stdout)

Navigation Data Flow

User Input → goto "project"    │    ├─► Check special cases (list, index, benchmark, @bookmark)    ├─► Check multi-level paths (contains /)    ├─► Try cache lookup (O(1)) → Cache hit → Navigate    ├─► Try direct folder match in search paths    ├─► Recursive search (max depth 3)    │   ├─► Single match → Navigate    │   └─► Multiple matches → Show disambiguation    └─► Natural language AI resolution (if spaces)

Bookmark System Architecture

Storage: ~/.goto_bookmarks

Format:

work|/Users/manu/work|1697558122api|/Users/manu/code/api-server|1697558130

Key Functions:

  • __goto_bookmark_add - Add with validation
  • __goto_bookmark_remove - Remove by name
  • __goto_bookmark_get - Retrieve path (O(1) grep)
  • __goto_bookmark_goto - Navigate to bookmark

Performance Target: <10ms lookup time

Usage:

bash
bookmark add work /path/to/workbookmark remove workgoto @work

History Tracking Architecture

Storage: ~/.goto_history

Format:

1697558122|/Users/manu/work1697558130|/Users/manu/Documents/LUXOR

Key Functions:

  • __goto_track - Append with auto-trim (max 100 entries)
  • __goto_get_history - Retrieve full history
  • __goto_recent_dirs - Get unique directories in reverse chronological order
  • __goto_stack_push/pop - Stack-based back navigation

Example Usage:

bash
goto recent        # Show all recent directoriesgoto recent 5      # Show 5 most recentback              # Go back to previous directory

Examples

Example 1: Adding a Recent Directories Feature (CET-77)

Step 1: Plan

Feature: Recent Directories CommandProblem: Users can't quickly revisit recently navigated directoriesInterface: goto recent [n]Performance: <10ms for history retrievalDependencies: history-tracking.shTests: List recent, empty history, limit entries, navigate by numberDocs: API.md, README.md

Step 2: Create Module (lib/recent-command.sh)

bash
#!/bin/bash# unix-goto - Recent directories command# https://github.com/manutej/unix-goto
# Get recent directories__goto_recent_dirs() {    local limit="${1:-}"
    if [ ! -f "$GOTO_HISTORY_FILE" ]; then        return 1    fi
    # Extract paths, reverse order, unique, limit    local dirs=$(awk -F'|' '{print $2}' "$GOTO_HISTORY_FILE" | \                 tac | \                 awk '!seen[$0]++' | \                 ${limit:+head -n "$limit"})
    echo "$dirs"    return 0}
# Recent command implementationgoto_recent() {    local limit="${1:-}"
    local dirs=$(__goto_recent_dirs "$limit")
    if [ -z "$dirs" ]; then        echo "No recent directories"        return 1    fi
    echo "$dirs"    return 0}

Step 3: Add to Loader (goto.sh)

bash
source "$GOTO_LIB_DIR/history-tracking.sh"source "$GOTO_LIB_DIR/recent-command.sh"  # NEW

Step 4: Integrate (lib/goto-function.sh)

bash
goto() {    case "$1" in        recent)            shift            goto_recent "$@"            return            ;;    esac}

Step 5: Add Tests (test-recent.sh)

bash
#!/bin/bashset -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"source "$SCRIPT_DIR/lib/recent-command.sh"
TESTS_PASSED=0TESTS_FAILED=0
pass() { echo "✓ PASS: $1"; ((TESTS_PASSED++)); }fail() { echo "✗ FAIL: $1"; ((TESTS_FAILED++)); }
# Test 1: Get recent directoriestest_get_recent() {    result=$(__goto_recent_dirs)    [ $? -eq 0 ] && pass "Get recent dirs" || fail "Failed"}
# Test 2: Empty historytest_empty_history() {    rm -f ~/.goto_history    result=$(goto_recent)    [[ "$result" == *"No recent"* ]] && pass "Empty history" || fail "Empty check"}
# Test 3: Limit resultstest_limit_results() {    result=$(__goto_recent_dirs 5)    count=$(echo "$result" | wc -l)    [ $count -le 5 ] && pass "Limit to 5" || fail "Limit failed"}
# Run teststest_get_recenttest_empty_historytest_limit_results
echo ""echo "Passed: $TESTS_PASSED, Failed: $TESTS_FAILED"[ $TESTS_FAILED -eq 0 ] && exit 0 || exit 1

Step 6: Document API (docs/API.md)

markdown
## Recent Directories
### `goto recent [n]`
Display recently navigated directories in reverse chronological order.
**Performance:** <10ms for history retrieval
**Examples:**```bashgoto recent        # Show all recent directoriesgoto recent 5      # Show 5 most recent

**Step 7: Update README** (`README.md`)```markdown### Recent Directories
Quickly revisit recently navigated directories:
```bashgoto recent        # Show all recent directoriesgoto recent 5      # Show 5 most recent

**Step 8: Validate Performance**```bashtime goto recent# Expected: <10ms

Step 9: Commit

bash
git commit -m "feat: implement recent directories command (CET-77)
Add goto recent command to display recently navigated directories.
Features:- List all recent directories- Limit to N most recent- Unique directories only- Reverse chronological order
Performance:- History retrieval: <10ms ✓
Tests:- 3/3 tests passing- 100% coverage
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>"

Example 2: Adding Benchmark Suite (CET-85)

Complete benchmark implementation with helpers, workspace, and CSV storage.

Benchmark Structure (benchmarks/bench-cached-vs-uncached.sh)

bash
#!/bin/bash# Benchmark: Cached vs Uncached Navigation Performance
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"REPO_DIR="$SCRIPT_DIR/.."
source "$SCRIPT_DIR/bench-helpers.sh"source "$REPO_DIR/lib/cache-index.sh"
main() {    bench_header "Cached vs Uncached Navigation Performance"
    echo "Configuration:"    echo "  Iterations: 10"    echo "  Warmup: 3 runs"    echo ""
    benchmark_cached_vs_uncached
    generate_summary}
benchmark_cached_vs_uncached() {    bench_section "Benchmark: Cached vs Uncached Lookup"
    # Setup workspace    local workspace=$(bench_create_workspace "medium")
    # Phase 1: Uncached lookup    echo "Phase 1: Uncached lookup (no cache)"    echo "─────────────────────────────────"
    # Warmup    bench_warmup "__goto_cache_lookup unix-goto" 3
    # Run benchmark    local uncached_stats=$(bench_run "uncached" \        "__goto_cache_lookup unix-goto" 10)
    IFS=',' read -r uc_min uc_max uc_mean uc_median uc_stddev <<< "$uncached_stats"
    bench_print_stats "$uncached_stats" "Uncached Results"
    # Phase 2: Cached lookup    echo ""    echo "Phase 2: Cached lookup (with cache)"    echo "─────────────────────────────────"
    # Build cache    __goto_cache_build
    # Warmup    bench_warmup "__goto_cache_lookup unix-goto" 3
    # Run benchmark    local cached_stats=$(bench_run "cached" \        "__goto_cache_lookup unix-goto" 10)
    IFS=',' read -r c_min c_max c_mean c_median c_stddev <<< "$cached_stats"
    bench_print_stats "$cached_stats" "Cached Results"
    # Calculate speedup    local speedup=$(bench_compare "$uc_mean" "$c_mean")
    echo ""    echo "Speedup Analysis:"    echo "  Speedup ratio:                               ${speedup}x"
    # Assert targets    bench_assert_target "$c_mean" 100 "Cached navigation time"
    # Save results    bench_save_result "cached_vs_uncached" "$uncached_stats" "uncached"    bench_save_result "cached_vs_uncached" "$cached_stats" "cached"
    # Cleanup    bench_cleanup_workspace "$workspace"}
mainexit 0

Benchmark Helpers (benchmarks/bench-helpers.sh)

bash
#!/bin/bash# Benchmark helper functions
BENCH_RESULTS_DIR="${BENCH_RESULTS_DIR:-$HOME/.goto_benchmarks}"
# High-precision timingbench_time_ms() {    local cmd="$*"    local start=$(date +%s%N)    eval "$cmd" > /dev/null 2>&1    local end=$(date +%s%N)    echo $(((end - start) / 1000000))}
# Calculate statisticsbench_calculate_stats() {    local values=("$@")    local count=${#values[@]}
    # Sort values    IFS=$'\n' sorted=($(sort -n <<<"${values[*]}"))
    # Min/Max    local min=${sorted[0]}    local max=${sorted[$((count-1))]}
    # Mean    local sum=0    for val in "${values[@]}"; do        sum=$((sum + val))    done    local mean=$((sum / count))
    # Median    local mid=$((count / 2))    local median=${sorted[$mid]}
    # Standard deviation    local variance=0    for val in "${values[@]}"; do        local diff=$((val - mean))        variance=$((variance + diff * diff))    done    variance=$((variance / count))    local stddev=$(echo "sqrt($variance)" | bc)
    echo "$min,$max,$mean,$median,$stddev"}
# Print headerbench_header() {    local title="$1"    echo "╔══════════════════════════════════════════════════════════════════╗"    printf "║  %-62s  ║\n" "$title"    echo "╚══════════════════════════════════════════════════════════════════╝"    echo ""}
# Print sectionbench_section() {    local title="$1"    echo "$title"    echo "─────────────────────────────────────────────────────────────────"}
# Print statistics blockbench_print_stats() {    local stats="$1"    local label="$2"
    IFS=',' read -r min max mean median stddev <<< "$stats"
    echo ""    echo "$label:"    printf "  Min:                                             %dms\n" "$min"    printf "  Max:                                             %dms\n" "$max"    printf "  Mean:                                            %dms\n" "$mean"    printf "  Median:                                          %dms\n" "$median"    printf "  Std Dev:                                       %.2fms\n" "$stddev"}
# Assert performance targetbench_assert_target() {    local actual="$1"    local target="$2"    local label="$3"
    if [ "$actual" -lt "$target" ]; then        echo "✓ $label meets target: ${actual}ms (target: <${target}ms)"    else        echo "✗ $label exceeds target: ${actual}ms (target: <${target}ms)"    fi}
# Initialize results directorybench_init() {    mkdir -p "$BENCH_RESULTS_DIR"}
# Save benchmark resultbench_save_result() {    bench_init
    local name="$1"    local stats="$2"    local metadata="${3:-}"
    local timestamp=$(date +%s)    local results_file="$BENCH_RESULTS_DIR/results.csv"
    # Create header if file doesn't exist    if [ ! -f "$results_file" ]; then        echo "timestamp,benchmark_name,operation,min_ms,max_ms,mean_ms,median_ms,stddev,metadata" > "$results_file"    fi
    # Append result    echo "$timestamp,$name,$metadata,$stats" >> "$results_file"}
# Create test workspacebench_create_workspace() {    local size="${1:-medium}"    local workspace=$(mktemp -d)
    case "$size" in        small)            # 10 folders            for i in {1..10}; do                mkdir -p "$workspace/folder-$i"            done            ;;        medium)            # 50 folders            for i in {1..50}; do                mkdir -p "$workspace/folder-$i"            done            ;;        large)            # 500 folders            for i in {1..500}; do                mkdir -p "$workspace/folder-$i"            done            ;;    esac
    echo "$workspace"}
# Cleanup workspacebench_cleanup_workspace() {    local workspace="$1"    rm -rf "$workspace"}
# Run benchmark iterationsbench_run() {    local name="$1"    local cmd="$2"    local iterations="${3:-10}"
    local times=()
    for i in $(seq 1 $iterations); do        local time=$(bench_time_ms "$cmd")        times+=("$time")        printf "  Run %2d: %dms\n" "$i" "$time"    done
    bench_calculate_stats "${times[@]}"}
# Warmup iterationsbench_warmup() {    local cmd="$1"    local iterations="${2:-3}"
    for i in $(seq 1 $iterations); do        eval "$cmd" > /dev/null 2>&1    done}
# Compare performancebench_compare() {    local baseline="$1"    local optimized="$2"
    local speedup=$(echo "scale=2; $baseline / $optimized" | bc)    echo "$speedup"}

Best Practices

Code Style Standards

Function Structure:

bash
function_name() {    local param1="$1"    local param2="${2:-default}"
    # Validate inputs    if [ -z "$param1" ]; then        echo "Error: param1 required"        return 1    fi
    # Main logic    local result=$(process "$param1")
    # Return value    echo "$result"    return 0}

Error Handling:

bash
# Always check command successif ! goto index rebuild; then    echo "Failed to rebuild cache"    return 1fi
# Use meaningful error messagesif [ ! -d "$target_dir" ]; then    echo "❌ Directory not found: $target_dir"    return 1fi

Comments:

bash
# Good: Explain why, not what# Cache lookup is O(1) because we use grep on indexed file
# Bad: Explain what (obvious from code)# Set folder_name to first parameterfolder_name="$1"

Data File Format Pattern

Standard format: Pipe-delimited with metadata header

bash
# Module data file# Version: 1.0# Built: [timestamp]# Format: field1|field2|field3#---value1|value2|value3value1|value2|value3

Performance Optimization Tips

Cache System:

  • Use cache for all lookups
  • Limit recursive search depth
  • Avoid redundant filesystem operations
  • Use grep for fast text matching

Memory:

  • Cache file: <100KB for 500 folders
  • Memory usage: Minimal (shell functions only)
  • No persistent processes

Debugging Tips

Enable Bash Tracing:

bash
set -xsource goto.shgoto testset +x

Check Function Existence:

bash
if declare -f __goto_cache_lookup > /dev/null; then    echo "Function loaded"fi

Debug Cache Issues:

bash
# View cache filecat ~/.goto_index
# Check cache agestat -f %m ~/.goto_index
# Rebuild and observegoto index rebuild

Linear Workflow Integration

Linear Project Details:

  • Team: Ceti-luxor
  • Project: unix-goto - Shell Navigation Tool
  • Project ID: 7232cafe-cb71-4310-856a-0d584e6f3df0

Issue Lifecycle:

Backlog → In Progress → Complete

Standard Workflow:

  1. Pick an issue from Phase 3 backlog
  2. Move to "In Progress" in Linear
  3. Create feature branch: feature/CET-XX-feature-name
  4. Implement following 9-step workflow
  5. Test thoroughly (100% coverage)
  6. Commit with proper format
  7. Update Linear issue with results
  8. Move to "Complete"

Linear Issue Template:

markdown
## ProblemWhat problem does this solve?
## SolutionHow will we solve it?
## Acceptance Criteria- [ ] Criterion 1- [ ] Criterion 2- [ ] Tests pass- [ ] Performance targets met
## Performance Targets- Metric 1: <target>- Metric 2: <target>
## Dependencies- Issue CET-XX (if applicable)

Quick Reference

Essential Commands

bash
# Developmentsource goto.sh                 # Load all modulesgoto index rebuild             # Rebuild cachebash test-cache.sh             # Run cache testsbash test-benchmark.sh         # Run benchmark testsgoto benchmark all             # Run all benchmarks
# Debuggingset -x; goto project; set +x   # Trace executiondeclare -F | grep goto         # List functionscat ~/.goto_index              # View cache
# Git workflowgit checkout -b feature/CET-XX # Create branchgit commit -m "feat: ..."      # Commit with proper formatgit push origin feature/CET-XX # Push to remote
# Performancetime goto project              # Measure navigationgoto benchmark navigation      # Benchmark navigationgoto index status              # Check cache health

File Locations

~/.goto_index         - Cache file~/.goto_bookmarks     - Bookmarks file~/.goto_history       - History file~/.goto_stack         - Navigation stack~/.goto_benchmarks/   - Benchmark results directory

Performance Targets Summary

MetricTargetCurrent
Cached navigation<100ms26ms ✓
Cache build<5s3-5s ✓
Cache hit rate>90%92-95% ✓
Speedup ratio20-50x8x ⚠
Test coverage100%100% ✓

Skill Version: 1.0 Last Updated: October 2025 Maintained By: Manu Tej + Claude Code Source Repository: https://github.com/manutej/unix-goto

来源与署名

来源:manutej/luxor-claude-marketplace位于plugins/luxor-specialized-tools/skills/unix-goto-development提交1861cc9

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架