cognitive-ecosystem-seed/init.fish

363 lines
14 KiB
Fish
Executable File

#!/usr/bin/env fish
# Cognitive Ecosystem - Initialization Script
# Creates the essential structure for your knowledge system
# Configuration
set CURRENT_DIR (pwd)
set TEMPLATES_PATH "$CURRENT_DIR/.templates"
set CURRENT_DATE (date +%Y-%m-%d)
set DEFAULT_EDITOR "nvim" # Change to your preferred editor
# Colors for prettier output
set GREEN '\033[0;32m'
set BLUE '\033[0;34m'
set YELLOW '\033[0;33m'
set RED '\033[0;31m'
set NC '\033[0m' # No Color
function log_step
echo -e "$BLUE$argv$NC"
end
function log_done
echo -e "$GREEN$argv$NC"
end
function log_warn
echo -e "$YELLOW! $argv$NC"
end
function log_error
echo -e "$RED$argv$NC"
end
# Prompt for username
log_step "Please enter your username for the seed file:"
read -l USERNAME
if test -z "$USERNAME"
set USERNAME "user"
log_warn "No username provided, using 'user' as default"
else
log_done "Using username: $USERNAME"
end
# Safety check - confirm if critical directories already exist
if test -d "$CURRENT_DIR/journal" -o -d "$CURRENT_DIR/.templates"
log_warn "Some system directories already exist in: $CURRENT_DIR"
read -l -P "Continue and potentially overwrite existing files? (y/N) " confirm
if test "$confirm" != "y" -a "$confirm" != "Y"
log_error "Initialization aborted by user"
exit 1
end
end
# Create basic README
log_step "Creating README.md..."
echo "# Cognitive Ecosystem" > "$CURRENT_DIR/README.md"
echo "" >> "$CURRENT_DIR/README.md"
echo "A personal knowledge management system designed for deep integration of ideas, code, and resources." >> "$CURRENT_DIR/README.md"
log_done "README created"
# Create all necessary directories
log_step "Creating directory structure..."
# Main directories
mkdir -p "$CURRENT_DIR/journal/daily"
mkdir -p "$CURRENT_DIR/journal/weekly"
mkdir -p "$CURRENT_DIR/journal/monthly"
mkdir -p "$CURRENT_DIR/journal/quarterly"
mkdir -p "$CURRENT_DIR/journal/yearly"
mkdir -p "$CURRENT_DIR/projects"
mkdir -p "$CURRENT_DIR/people"
mkdir -p "$CURRENT_DIR/knowledge"
mkdir -p "$CURRENT_DIR/notebooks"
mkdir -p "$CURRENT_DIR/code"
mkdir -p "$CURRENT_DIR/resources"
mkdir -p "$TEMPLATES_PATH"
log_done "Directory structure created"
# Create seed node template
log_step "Creating seed node template..."
set SEED_TEMPLATE "$TEMPLATES_PATH/01-seed-node.md"
echo "---" > $SEED_TEMPLATE
echo "aliases: [\"Home\", \"Hub\", \"Seed\"]" >> $SEED_TEMPLATE
echo "tags: [system/core]" >> $SEED_TEMPLATE
echo "created: $CURRENT_DATE" >> $SEED_TEMPLATE
echo "---" >> $SEED_TEMPLATE
echo "" >> $SEED_TEMPLATE
echo "# Personal Seed Node" >> $SEED_TEMPLATE
echo "" >> $SEED_TEMPLATE
echo "## Input Stream" >> $SEED_TEMPLATE
echo "<!-- Capture your thoughts here without worrying about organization -->" >> $SEED_TEMPLATE
echo "" >> $SEED_TEMPLATE
echo "" >> $SEED_TEMPLATE
echo "## Navigation" >> $SEED_TEMPLATE
echo "<!-- Core links to primary areas -->" >> $SEED_TEMPLATE
echo "- [[journal/00-index|Journal]]" >> $SEED_TEMPLATE
echo "- [[projects/00-index|Projects]]" >> $SEED_TEMPLATE
echo "- [[people/00-index|People]]" >> $SEED_TEMPLATE
echo "- [[knowledge/00-index|Knowledge]]" >> $SEED_TEMPLATE
echo "- [[notebooks/00-index|Notebooks]]" >> $SEED_TEMPLATE
echo "- [[code/00-index|Code]]" >> $SEED_TEMPLATE
echo "- [[resources/00-index|Resources]]" >> $SEED_TEMPLATE
echo "" >> $SEED_TEMPLATE
echo "## Current Focus" >> $SEED_TEMPLATE
echo "<!-- What needs your attention right now -->" >> $SEED_TEMPLATE
echo "" >> $SEED_TEMPLATE
log_done "Seed node template created"
# Create daily note template
log_step "Creating daily note template..."
set DAILY_TEMPLATE "$TEMPLATES_PATH/10-daily-note.md"
echo "---" > $DAILY_TEMPLATE
echo "tags: [journal/daily]" >> $DAILY_TEMPLATE
echo "date: {{date}}" >> $DAILY_TEMPLATE
echo "---" >> $DAILY_TEMPLATE
echo "# {{date_pretty}}" >> $DAILY_TEMPLATE
echo "" >> $DAILY_TEMPLATE
echo "## Morning Thoughts" >> $DAILY_TEMPLATE
echo "" >> $DAILY_TEMPLATE
echo "## Ideas & Notes" >> $DAILY_TEMPLATE
echo "" >> $DAILY_TEMPLATE
echo "## Evening Reflection" >> $DAILY_TEMPLATE
echo "" >> $DAILY_TEMPLATE
log_done "Daily note template created"
# Create project note template
log_step "Creating project note template..."
set PROJECT_TEMPLATE "$TEMPLATES_PATH/20-project-note.md"
echo "---" > $PROJECT_TEMPLATE
echo "tags: [project]" >> $PROJECT_TEMPLATE
echo "status: idea" >> $PROJECT_TEMPLATE
echo "started: {{date}}" >> $PROJECT_TEMPLATE
echo "---" >> $PROJECT_TEMPLATE
echo "# {{title}}" >> $PROJECT_TEMPLATE
echo "" >> $PROJECT_TEMPLATE
echo "## Purpose" >> $PROJECT_TEMPLATE
echo "" >> $PROJECT_TEMPLATE
echo "## Current Status" >> $PROJECT_TEMPLATE
echo "" >> $PROJECT_TEMPLATE
echo "## Next Steps" >> $PROJECT_TEMPLATE
echo "" >> $PROJECT_TEMPLATE
log_done "Project template created"
# Create knowledge note template
log_step "Creating knowledge note template..."
set KNOWLEDGE_TEMPLATE "$TEMPLATES_PATH/30-knowledge-note.md"
echo "---" > $KNOWLEDGE_TEMPLATE
echo "tags: [knowledge]" >> $KNOWLEDGE_TEMPLATE
echo "created: {{date}}" >> $KNOWLEDGE_TEMPLATE
echo "---" >> $KNOWLEDGE_TEMPLATE
echo "# {{title}}" >> $KNOWLEDGE_TEMPLATE
echo "" >> $KNOWLEDGE_TEMPLATE
echo "## Overview" >> $KNOWLEDGE_TEMPLATE
echo "" >> $KNOWLEDGE_TEMPLATE
echo "## Key Concepts" >> $KNOWLEDGE_TEMPLATE
echo "" >> $KNOWLEDGE_TEMPLATE
echo "## Connections" >> $KNOWLEDGE_TEMPLATE
echo "" >> $KNOWLEDGE_TEMPLATE
log_done "Knowledge template created"
# Create .env file template
log_step "Creating .env file template..."
set ENV_TEMPLATE "$TEMPLATES_PATH/50-env.template"
echo "# Cognitive Ecosystem Configuration" > $ENV_TEMPLATE
echo "" >> $ENV_TEMPLATE
echo "# API Keys" >> $ENV_TEMPLATE
echo "OPENAI_API_KEY=" >> $ENV_TEMPLATE
echo "ANTHROPIC_API_KEY=" >> $ENV_TEMPLATE
echo "" >> $ENV_TEMPLATE
echo "# Model Configuration" >> $ENV_TEMPLATE
echo "DEFAULT_LLM_PROVIDER=anthropic" >> $ENV_TEMPLATE
echo "DEFAULT_LLM_MODEL=claude-3-7-sonnet-20250219" >> $ENV_TEMPLATE
echo "DEFAULT_EMBEDDING_MODEL=text-embedding-3-large" >> $ENV_TEMPLATE
echo "" >> $ENV_TEMPLATE
echo "# System Settings" >> $ENV_TEMPLATE
echo "LOG_LEVEL=info" >> $ENV_TEMPLATE
echo "ENABLE_AUTONOMOUS_AGENTS=false" >> $ENV_TEMPLATE
log_done ".env template created"
# Create basic .gitignore
log_step "Creating .gitignore..."
echo ".env" > "$CURRENT_DIR/.gitignore"
echo ".DS_Store" >> "$CURRENT_DIR/.gitignore"
echo "__pycache__/" >> "$CURRENT_DIR/.gitignore"
echo "*.pyc" >> "$CURRENT_DIR/.gitignore"
log_done ".gitignore created"
# Create initial seed node
log_step "Creating seed node..."
set SEED_NODE "$CURRENT_DIR/people/01-seed-$USERNAME.md"
cat "$TEMPLATES_PATH/01-seed-node.md" > $SEED_NODE
log_done "Seed node created at $SEED_NODE"
# Create today's daily note
log_step "Creating today's daily note..."
set TODAY_NOTE "$CURRENT_DIR/journal/daily/$CURRENT_DATE.md"
cat "$TEMPLATES_PATH/10-daily-note.md" | sed "s/{{date}}/$CURRENT_DATE/g" | sed "s/{{date_pretty}}/"(date '+%A, %B %-d, %Y')"/g" > $TODAY_NOTE
log_done "Today's note created at $TODAY_NOTE"
# Create index files
log_step "Creating index files..."
# Journal index
set JOURNAL_INDEX "$CURRENT_DIR/journal/00-index.md"
echo "# Journal" > $JOURNAL_INDEX
echo "" >> $JOURNAL_INDEX
echo "## Daily Entries" >> $JOURNAL_INDEX
echo "- [[$CURRENT_DATE]] (Today)" >> $JOURNAL_INDEX
echo "" >> $JOURNAL_INDEX
echo "## Time Periods" >> $JOURNAL_INDEX
echo "- [[weekly/00-index|Weekly Reviews]]" >> $JOURNAL_INDEX
echo "- [[monthly/00-index|Monthly Reviews]]" >> $JOURNAL_INDEX
echo "- [[quarterly/00-index|Quarterly Reviews]]" >> $JOURNAL_INDEX
echo "- [[yearly/00-index|Yearly Reviews]]" >> $JOURNAL_INDEX
echo "" >> $JOURNAL_INDEX
# Journal sub-indexes
echo "# Weekly Reviews" > "$CURRENT_DIR/journal/weekly/00-index.md"
echo "" >> "$CURRENT_DIR/journal/weekly/00-index.md"
echo "# Monthly Reviews" > "$CURRENT_DIR/journal/monthly/00-index.md"
echo "" >> "$CURRENT_DIR/journal/monthly/00-index.md"
echo "# Quarterly Reviews" > "$CURRENT_DIR/journal/quarterly/00-index.md"
echo "" >> "$CURRENT_DIR/journal/quarterly/00-index.md"
echo "# Yearly Reviews" > "$CURRENT_DIR/journal/yearly/00-index.md"
echo "" >> "$CURRENT_DIR/journal/yearly/00-index.md"
# Projects index
echo "# Projects" > "$CURRENT_DIR/projects/00-index.md"
echo "" >> "$CURRENT_DIR/projects/00-index.md"
echo "## Active Projects" >> "$CURRENT_DIR/projects/00-index.md"
echo "" >> "$CURRENT_DIR/projects/00-index.md"
# People index
echo "# People" > "$CURRENT_DIR/people/00-index.md"
echo "" >> "$CURRENT_DIR/people/00-index.md"
echo "## Connections" >> "$CURRENT_DIR/people/00-index.md"
echo "- [[01-seed-$USERNAME|$USERNAME (Me)]]" >> "$CURRENT_DIR/people/00-index.md"
echo "" >> "$CURRENT_DIR/people/00-index.md"
# Knowledge index
echo "# Knowledge" > "$CURRENT_DIR/knowledge/00-index.md"
echo "" >> "$CURRENT_DIR/knowledge/00-index.md"
echo "## Domains" >> "$CURRENT_DIR/knowledge/00-index.md"
echo "" >> "$CURRENT_DIR/knowledge/00-index.md"
# Notebooks index
echo "# Notebooks" > "$CURRENT_DIR/notebooks/00-index.md"
echo "" >> "$CURRENT_DIR/notebooks/00-index.md"
echo "## Experiments" >> "$CURRENT_DIR/notebooks/00-index.md"
echo "" >> "$CURRENT_DIR/notebooks/00-index.md"
# Code index
echo "# Code" > "$CURRENT_DIR/code/00-index.md"
echo "" >> "$CURRENT_DIR/code/00-index.md"
echo "## Components" >> "$CURRENT_DIR/code/00-index.md"
echo "" >> "$CURRENT_DIR/code/00-index.md"
# Resources index
echo "# Resources" > "$CURRENT_DIR/resources/00-index.md"
echo "" >> "$CURRENT_DIR/resources/00-index.md"
echo "## Papers" >> "$CURRENT_DIR/resources/00-index.md"
echo "" >> "$CURRENT_DIR/resources/00-index.md"
log_done "Index files created"
# Create .env file from template
log_step "Creating .env file..."
set ENV_FILE "$CURRENT_DIR/.env"
cp "$TEMPLATES_PATH/50-env.template" "$ENV_FILE"
log_done ".env file created"
# Set up fish abbreviation directly in current shell and in config
log_step "Setting up fish abbreviation..."
set REPO_PATH (realpath $CURRENT_DIR)
# Create the abbreviation in the current shell
abbr -a s "cd \"$REPO_PATH\" && $DEFAULT_EDITOR \"people/01-seed-$USERNAME.md\""
# Also add it to the config file if not already there
if not contains "abbr -Ua s" ~/.config/fish/config.fish
echo "" >> ~/.config/fish/config.fish
echo "# Cognitive Ecosystem - quick access to seed node" >> ~/.config/fish/config.fish
echo "abbr -Ua s 'cd \"$REPO_PATH\" && $DEFAULT_EDITOR \"people/01-seed-$USERNAME.md\"'" >> ~/.config/fish/config.fish
log_done "Added abbreviation 's' to fish config and current shell"
else
log_warn "Abbreviation 's' already exists in fish config"
log_done "Added abbreviation 's' to current shell only"
end
# Create next steps document
log_step "Creating next steps document..."
set NEXT_STEPS "$CURRENT_DIR/00-NEXT-STEPS.md"
echo "# Next Steps for Your Cognitive Ecosystem" > $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "Now that you have your basic structure in place, here are some suggested next steps:" >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "## Immediate Actions" >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "1. **Initialize Git Repository**" >> $NEXT_STEPS
echo " ```bash" >> $NEXT_STEPS
echo " git init" >> $NEXT_STEPS
echo " git add ." >> $NEXT_STEPS
echo " git commit -m \"Initial commit: Cognitive Ecosystem seed\"" >> $NEXT_STEPS
echo " ```" >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "2. **Set Up Obsidian**" >> $NEXT_STEPS
echo " - Open this folder in Obsidian" >> $NEXT_STEPS
echo " - Configure graph view for better visualization" >> $NEXT_STEPS
echo " - Consider useful plugins like Dataview or Calendar" >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "3. **Begin Journal Practice**" >> $NEXT_STEPS
echo " - Start using the daily journal for note-taking" >> $NEXT_STEPS
echo " - Use the seed node as your dashboard" >> $NEXT_STEPS
echo " - Begin organizing knowledge as it emerges" >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "## Development Paths" >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "1. **Basic CLI Tool**" >> $NEXT_STEPS
echo " - Create a simple Python CLI in the code directory" >> $NEXT_STEPS
echo " - Implement commands for common operations" >> $NEXT_STEPS
echo " - Add FZF integration for navigation" >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "2. **Resource Processing**" >> $NEXT_STEPS
echo " - Set up a pipeline for processing PDFs" >> $NEXT_STEPS
echo " - Implement YouTube transcript extraction" >> $NEXT_STEPS
echo " - Create a system for code documentation" >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "3. **Agent Framework**" >> $NEXT_STEPS
echo " - Implement a basic receptionist agent" >> $NEXT_STEPS
echo " - Set up vector storage for embeddings" >> $NEXT_STEPS
echo " - Create a simple chat interface" >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "## File Numbering Convention" >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "The system uses a numerical prefix convention for organizing files:" >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "- **00-**: Index files that provide an overview of a directory" >> $NEXT_STEPS
echo "- **01-09**: Primary/core files (e.g., seed node)" >> $NEXT_STEPS
echo "- **10-49**: Standard content files" >> $NEXT_STEPS
echo "- **50-99**: Configuration and system files" >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "The only files without numerical prefixes are journal entries, which use date-based naming." >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "## System Evolution" >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "As your system grows, consider:" >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "- **Git Hooks** for automation" >> $NEXT_STEPS
echo "- **Dashboard Development** for system visibility" >> $NEXT_STEPS
echo "- **Integration with External Tools** like tmux and neovim" >> $NEXT_STEPS
echo "- **Autonomous Processing** for knowledge metabolism" >> $NEXT_STEPS
echo "" >> $NEXT_STEPS
echo "Remember that the system should grow organically based on your actual usage patterns." >> $NEXT_STEPS
echo "Focus on establishing consistent practices before implementing complex automations." >> $NEXT_STEPS
log_done "Next steps document created"
echo ""
log_done "Initialization complete! Your cognitive ecosystem is ready."
echo ""
echo -e "$GREEN""To access your seed node, type 's' (works in current shell)""$NC"
echo -e "$BLUE""Or navigate to: $SEED_NODE""$NC"
echo ""
echo -e "$YELLOW""See 00-NEXT-STEPS.md for suggested actions to continue development""$NC"
echo ""