shmakk 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -1
- package/package.json +6 -3
- package/scripts/import-skills.js +536 -0
- package/scripts/install-skills.js +64 -0
- package/skills/ai-elements.md +482 -0
- package/skills/architecture.md +151 -0
- package/skills/backend-adapter-aws-lambda.md +204 -0
- package/skills/backend-adapter-express.md +177 -0
- package/skills/backend-adapter-fastify.md +222 -0
- package/skills/backend-adapter-fetch.md +200 -0
- package/skills/backend-api-docs.md +22 -0
- package/skills/backend-aspire.md +232 -0
- package/skills/backend-aspnet-core.md +62 -0
- package/skills/backend-build-chatgpt-app.md +321 -0
- package/skills/backend-build-mcp-app.md +393 -0
- package/skills/backend-build-mcp-server.md +222 -0
- package/skills/backend-build-mcpb.md +200 -0
- package/skills/backend-building-ai-agent-on-cloudflare.md +401 -0
- package/skills/backend-caching.md +206 -0
- package/skills/backend-chatgpt-app-submission.md +157 -0
- package/skills/backend-chatgpt-apps.md +321 -0
- package/skills/backend-client-setup.md +318 -0
- package/skills/backend-containerize-aspnet-framework.md +455 -0
- package/skills/backend-create-spring-boot-java-project.md +164 -0
- package/skills/backend-create-spring-boot-kotlin-project.md +148 -0
- package/skills/backend-csharp-async.md +50 -0
- package/skills/backend-csharp-docs.md +63 -0
- package/skills/backend-csharp-mcp-server-generator.md +60 -0
- package/skills/backend-dotenv.md +201 -0
- package/skills/backend-dotenvx.md +119 -0
- package/skills/backend-env-vars.md +259 -0
- package/skills/backend-error-handling.md +254 -0
- package/skills/backend-fastapi.md +437 -0
- package/skills/backend-go-mcp-server-generator.md +335 -0
- package/skills/backend-java-mcp-server-generator.md +757 -0
- package/skills/backend-kotlin-mcp-server-generator.md +450 -0
- package/skills/backend-middlewares.md +243 -0
- package/skills/backend-multi-stage-dockerfile.md +47 -0
- package/skills/backend-nestjs.md +192 -0
- package/skills/backend-next-forge.md +375 -0
- package/skills/backend-nextjs.md +746 -0
- package/skills/backend-openapi-to-application-code.md +113 -0
- package/skills/backend-php-mcp-server-generator.md +523 -0
- package/skills/backend-python-mcp-server-generator.md +106 -0
- package/skills/backend-routing-middleware.md +251 -0
- package/skills/backend-ruby-mcp-server-generator.md +661 -0
- package/skills/backend-rust-mcp-server-generator.md +578 -0
- package/skills/backend-semantic-kernel.md +57 -0
- package/skills/backend-server-setup.md +379 -0
- package/skills/backend-server-side-calls.md +250 -0
- package/skills/backend-subscriptions.md +407 -0
- package/skills/backend-swift-mcp-server-generator.md +670 -0
- package/skills/backend-trpc-router.md +152 -0
- package/skills/backend-typescript-mcp-server-generator.md +91 -0
- package/skills/backend-validators.md +229 -0
- package/skills/backend.md +76 -0
- package/skills/backup.md +165 -0
- package/skills/budget.md +140 -0
- package/skills/business-gtm-0-to-1-launch.md +322 -0
- package/skills/business-gtm-operating-cadence.md +421 -0
- package/skills/business-gtm-positioning-strategy.md +439 -0
- package/skills/business-gtm-product-led-growth.md +340 -0
- package/skills/calendar.md +95 -0
- package/skills/code-review.md +130 -0
- package/skills/compliance.md +168 -0
- package/skills/contracts.md +130 -0
- package/skills/daily-job-run.md +46 -0
- package/skills/daily-webdesign.md +187 -0
- package/skills/database-bigquery-pipeline-audit.md +130 -0
- package/skills/database-cosmosdb-datamodeling.md +1046 -0
- package/skills/database-durable-objects.md +187 -0
- package/skills/database-ef-core.md +76 -0
- package/skills/database-fabric-lakehouse.md +107 -0
- package/skills/database-neon-postgres-egress-optimizer.md +213 -0
- package/skills/database-neon-postgres.md +218 -0
- package/skills/database-postgresql-code-review.md +213 -0
- package/skills/database-postgresql-optimization.md +405 -0
- package/skills/database-sql-code-review.md +302 -0
- package/skills/database-sql-optimization.md +297 -0
- package/skills/dependency-audit.md +165 -0
- package/skills/design-kami-landing.md +234 -0
- package/skills/design.md +221 -0
- package/skills/dev-acquire-codebase-knowledge.md +175 -0
- package/skills/dev-add-educational-comments.md +129 -0
- package/skills/dev-add-model-descriptions.md +74 -0
- package/skills/dev-adr-review.md +56 -0
- package/skills/dev-boost-prompt.md +26 -0
- package/skills/dev-build-run-debug.md +130 -0
- package/skills/dev-chunk.md +49 -0
- package/skills/dev-claude-md-improver.md +180 -0
- package/skills/dev-code-exemplars-blueprint-generator.md +127 -0
- package/skills/dev-code-tour.md +434 -0
- package/skills/dev-comment-code-generate-a-tutorial.md +27 -0
- package/skills/dev-commit.md +81 -0
- package/skills/dev-context-map.md +53 -0
- package/skills/dev-conventional-commit.md +73 -0
- package/skills/dev-create-architectural-decision-record.md +98 -0
- package/skills/dev-create-draft-pr.md +17 -0
- package/skills/dev-create-pr.md +17 -0
- package/skills/dev-create-readme.md +22 -0
- package/skills/dev-csharp-mstest.md +479 -0
- package/skills/dev-csharp-nunit.md +72 -0
- package/skills/dev-csharp-tunit.md +101 -0
- package/skills/dev-csharp-xunit.md +69 -0
- package/skills/dev-debug-failing-test.md +90 -0
- package/skills/dev-diff-analyze.md +32 -0
- package/skills/dev-diffs.md +24 -0
- package/skills/dev-dotnet-best-practices.md +86 -0
- package/skills/dev-dotnet-design-pattern-review.md +43 -0
- package/skills/dev-dotnet-timezone.md +110 -0
- package/skills/dev-dotnet-upgrade.md +117 -0
- package/skills/dev-doublecheck.md +278 -0
- package/skills/dev-explain-error.md +15 -0
- package/skills/dev-finding-discovery.md +164 -0
- package/skills/dev-fix-finding.md +111 -0
- package/skills/dev-full-file-edit.md +25 -0
- package/skills/dev-git-commit.md +125 -0
- package/skills/dev-git-flow-branch-creator.md +293 -0
- package/skills/dev-git-workflow.md +46 -0
- package/skills/dev-github-automation.md +64 -0
- package/skills/dev-github-code-review.md +1140 -0
- package/skills/dev-github-issues.md +202 -0
- package/skills/dev-gpt-5-4-prompting.md +55 -0
- package/skills/dev-investigation-mode.md +277 -0
- package/skills/dev-java-add-graalvm-native-image-support.md +450 -0
- package/skills/dev-java-docs.md +24 -0
- package/skills/dev-java-refactoring-extract-method.md +105 -0
- package/skills/dev-java-refactoring-remove-parameter.md +85 -0
- package/skills/dev-merge.md +73 -0
- package/skills/dev-migrate-create.md +36 -0
- package/skills/dev-migrate-validate.md +36 -0
- package/skills/dev-my-issues.md +9 -0
- package/skills/dev-my-pull-requests.md +15 -0
- package/skills/dev-planning-oracle-to-postgres-migration-integration-testing.md +45 -0
- package/skills/dev-playwright-generate-test.md +18 -0
- package/skills/dev-playwright.md +148 -0
- package/skills/dev-prompt-builder.md +142 -0
- package/skills/dev-pytest-coverage.md +29 -0
- package/skills/dev-python-manager-discovery.md +330 -0
- package/skills/dev-python-pypi-package-builder.md +445 -0
- package/skills/dev-readme-blueprint-generator.md +79 -0
- package/skills/dev-refactor-method-complexity-reduce.md +99 -0
- package/skills/dev-refactor-plan.md +66 -0
- package/skills/dev-refactor.md +646 -0
- package/skills/dev-review-and-refactor.md +16 -0
- package/skills/dev-reviewing-oracle-to-postgres-migration.md +68 -0
- package/skills/dev-ruff-recursive-fix.md +201 -0
- package/skills/dev-run-e2e-tests.md +126 -0
- package/skills/dev-run-pre-commit-checks.md +133 -0
- package/skills/dev-run-smoke-tests.md +127 -0
- package/skills/dev-scaffolding-oracle-to-postgres-migration-test-project.md +55 -0
- package/skills/dev-spring-boot-testing.md +190 -0
- package/skills/dev-sync-upstream.md +32 -0
- package/skills/dev-sync.md +74 -0
- package/skills/dev-tdd-workflow.md +23 -0
- package/skills/dev-terraform-azurerm-set-diff-analyzer.md +49 -0
- package/skills/dev-test-driven-development.md +372 -0
- package/skills/dev-test-gaps.md +18 -0
- package/skills/dev-test-triage.md +55 -0
- package/skills/dev-typer.md +267 -0
- package/skills/dev-typescript-setup.md +25 -0
- package/skills/dev-unified-diff-edit.md +16 -0
- package/skills/dev-unit-test-vue-pinia.md +198 -0
- package/skills/dev-using-git-worktrees.md +216 -0
- package/skills/dev-validation.md +99 -0
- package/skills/dev-verification.md +168 -0
- package/skills/dev-webapp-testing.md +134 -0
- package/skills/dev-write-coding-standards-from-file.md +317 -0
- package/skills/dev-write-tests.md +16 -0
- package/skills/devops-appinsights-instrumentation.md +49 -0
- package/skills/devops-az-cost-optimize.md +306 -0
- package/skills/devops-chronicle.md +154 -0
- package/skills/devops-deployments-cicd.md +331 -0
- package/skills/devops-devops-rollout-plan.md +118 -0
- package/skills/devops-geistdocs.md +276 -0
- package/skills/devops-observability.md +774 -0
- package/skills/devops-observe-metrics.md +35 -0
- package/skills/devops-observe-trace.md +30 -0
- package/skills/devops-phoenix-cli.md +163 -0
- package/skills/devops-phoenix-tracing.md +140 -0
- package/skills/devops-publish-to-pages.md +108 -0
- package/skills/devops-telemetry.md +87 -0
- package/skills/devops-update-avm-modules-in-bicep.md +61 -0
- package/skills/devops.md +81 -0
- package/skills/diagrams-canvas.md +204 -0
- package/skills/diagrams-draw-io-diagram-generator.md +463 -0
- package/skills/diagrams-excalidraw-diagram-generator.md +614 -0
- package/skills/diagrams-graphify.md +1277 -0
- package/skills/docs-bear-notes.md +108 -0
- package/skills/docs-create-llms.md +211 -0
- package/skills/docs-doc-gen.md +20 -0
- package/skills/docs-documentation-writer.md +46 -0
- package/skills/docs-llm-config.md +33 -0
- package/skills/docs-mkdocs-translations.md +109 -0
- package/skills/docs-obsidian-vault-maintainer.md +14 -0
- package/skills/docs-obsidian.md +82 -0
- package/skills/docs-prose.md +324 -0
- package/skills/docs-update-llms.md +217 -0
- package/skills/docs-update-markdown-file-index.md +77 -0
- package/skills/docs-wiki-maintainer.md +20 -0
- package/skills/documents.md +120 -0
- package/skills/email.md +113 -0
- package/skills/expenses.md +140 -0
- package/skills/file-ops.md +149 -0
- package/skills/files-convert-plaintext-to-md.md +363 -0
- package/skills/files-doc.md +81 -0
- package/skills/files-docx.md +594 -0
- package/skills/files-markdown-to-html.md +917 -0
- package/skills/files-nano-pdf.md +39 -0
- package/skills/files-pdf.md +315 -0
- package/skills/files-pdftk-server.md +163 -0
- package/skills/files-pptx-html-fidelity-audit.md +255 -0
- package/skills/files-pptx.md +231 -0
- package/skills/files-xlsx.md +301 -0
- package/skills/find-jobs.md +78 -0
- package/skills/format-conversion.md +157 -0
- package/skills/frontend-ai-elements.md +483 -0
- package/skills/frontend-ai-gateway.md +563 -0
- package/skills/frontend-ai-generation-persistence.md +242 -0
- package/skills/frontend-ai-sdk.md +799 -0
- package/skills/frontend-ai-visibility.md +127 -0
- package/skills/frontend-angular-developer.md +130 -0
- package/skills/frontend-aspnet-minimal-api-openapi.md +42 -0
- package/skills/frontend-bencium-innovative-ux-designer.md +719 -0
- package/skills/frontend-chat-sdk.md +666 -0
- package/skills/frontend-chrome-devtools.md +98 -0
- package/skills/frontend-frontend-app-builder.md +186 -0
- package/skills/frontend-frontend-design.md +43 -0
- package/skills/frontend-frontend-testing-debugging.md +143 -0
- package/skills/frontend-gsap-framer-scroll-animation.md +152 -0
- package/skills/frontend-internal-linking.md +109 -0
- package/skills/frontend-json-render.md +335 -0
- package/skills/frontend-keyword-clustering.md +118 -0
- package/skills/frontend-next-intl-add-language.md +20 -0
- package/skills/frontend-on-page-seo.md +112 -0
- package/skills/frontend-premium-frontend-ui.md +114 -0
- package/skills/frontend-react-best-practices.md +143 -0
- package/skills/frontend-schema-markup.md +160 -0
- package/skills/frontend-seo-audit.md +110 -0
- package/skills/frontend-swr.md +215 -0
- package/skills/frontend-technical-seo.md +162 -0
- package/skills/frontend-use-dom.md +418 -0
- package/skills/frontend-web-coder.md +564 -0
- package/skills/frontend-web-design-reviewer.md +369 -0
- package/skills/frontend-web-perf.md +202 -0
- package/skills/frontend.md +125 -0
- package/skills/general-adapter-standalone.md +199 -0
- package/skills/general-auth.md +356 -0
- package/skills/general-containerize-aspnetcore.md +393 -0
- package/skills/general-create-technical-spike.md +231 -0
- package/skills/general-cron-jobs.md +72 -0
- package/skills/general-ddd-aggregate.md +52 -0
- package/skills/general-ddd-context.md +46 -0
- package/skills/general-ddd-validate.md +51 -0
- package/skills/general-dependency-check.md +26 -0
- package/skills/general-email-marketing.md +86 -0
- package/skills/general-healthcheck.md +246 -0
- package/skills/general-import-infrastructure-as-code.md +368 -0
- package/skills/general-init.md +49 -0
- package/skills/general-java-junit.md +64 -0
- package/skills/general-java-springboot.md +66 -0
- package/skills/general-javascript-typescript-jest.md +45 -0
- package/skills/general-kotlin-springboot.md +71 -0
- package/skills/general-make-repo-contribution.md +91 -0
- package/skills/general-market-research.md +78 -0
- package/skills/general-marketplace.md +468 -0
- package/skills/general-model-recommendation.md +673 -0
- package/skills/general-payments.md +352 -0
- package/skills/general-quality-playbook.md +480 -0
- package/skills/general-run-integration-tests.md +113 -0
- package/skills/general-superjson.md +274 -0
- package/skills/general-swiftpm-macos.md +51 -0
- package/skills/general-threat-model.md +61 -0
- package/skills/invoices.md +167 -0
- package/skills/licenses.md +159 -0
- package/skills/logs.md +156 -0
- package/skills/marketing.md +139 -0
- package/skills/media-image-manipulation-image-magick.md +253 -0
- package/skills/media-imagegen.md +357 -0
- package/skills/media-openai-whisper-api.md +63 -0
- package/skills/media-openai-whisper.md +39 -0
- package/skills/media-peekaboo.md +191 -0
- package/skills/media-screenshot.md +268 -0
- package/skills/media-speech.md +145 -0
- package/skills/media-transcribe.md +82 -0
- package/skills/media-video-frames.md +47 -0
- package/skills/mobile-android-emulator-qa.md +81 -0
- package/skills/mobile-android-performance.md +280 -0
- package/skills/mobile-building-mcp-server-on-cloudflare.md +267 -0
- package/skills/mobile-building-native-ui.md +322 -0
- package/skills/mobile-expo-api-routes.md +369 -0
- package/skills/mobile-expo-cicd-workflows.md +92 -0
- package/skills/mobile-expo-deployment.md +191 -0
- package/skills/mobile-expo-dev-client.md +165 -0
- package/skills/mobile-expo-module.md +177 -0
- package/skills/mobile-expo-tailwind-setup.md +481 -0
- package/skills/mobile-expo-ui-jetpack-compose.md +41 -0
- package/skills/mobile-expo-ui-swift-ui.md +40 -0
- package/skills/mobile-ios-app-intents.md +78 -0
- package/skills/mobile-ios-debugger-agent.md +52 -0
- package/skills/mobile-ios-ettrace-performance.md +198 -0
- package/skills/mobile-ios-memgraph-leaks.md +77 -0
- package/skills/mobile-native-data-fetching.md +508 -0
- package/skills/mobile-packaging-notarization.md +48 -0
- package/skills/mobile-react-native-architecture.md +672 -0
- package/skills/mobile-react-native-mobile-design.md +438 -0
- package/skills/mobile-signing-entitlements.md +59 -0
- package/skills/mobile-swiftui-liquid-glass.md +91 -0
- package/skills/mobile-swiftui-patterns.md +210 -0
- package/skills/mobile-swiftui-performance-audit.md +108 -0
- package/skills/mobile-swiftui-ui-patterns.md +97 -0
- package/skills/mobile-swiftui-view-refactor.md +204 -0
- package/skills/mobile-upgrading-expo.md +134 -0
- package/skills/mobile.md +183 -0
- package/skills/notes.md +106 -0
- package/skills/planning-adr-create.md +62 -0
- package/skills/planning-adr-index.md +67 -0
- package/skills/planning-architecture-blueprint-generator.md +323 -0
- package/skills/planning-brainstorming.md +165 -0
- package/skills/planning-breakdown-epic-arch.md +67 -0
- package/skills/planning-breakdown-epic-pm.md +59 -0
- package/skills/planning-breakdown-feature-implementation.md +129 -0
- package/skills/planning-breakdown-feature-prd.md +62 -0
- package/skills/planning-breakdown-plan.md +510 -0
- package/skills/planning-breakdown-test.md +366 -0
- package/skills/planning-cloud-design-patterns.md +63 -0
- package/skills/planning-content-brief.md +128 -0
- package/skills/planning-content-strategy.md +138 -0
- package/skills/planning-content-translation.md +143 -0
- package/skills/planning-create-github-action-workflow-specification.md +277 -0
- package/skills/planning-create-github-issues-feature-from-implementation-plan.md +29 -0
- package/skills/planning-create-github-issues-for-unmet-specification-requirements.md +36 -0
- package/skills/planning-create-github-pull-request-from-specification.md +25 -0
- package/skills/planning-create-implementation-plan.md +158 -0
- package/skills/planning-create-specification.md +128 -0
- package/skills/planning-first-ask.md +31 -0
- package/skills/planning-folder-structure-blueprint-generator.md +406 -0
- package/skills/planning-gen-specs-as-issues.md +166 -0
- package/skills/planning-generate-snapshot.md +144 -0
- package/skills/planning-generate-status-report.md +336 -0
- package/skills/planning-metric-pack-designer.md +27 -0
- package/skills/planning-pm-spec.md +53 -0
- package/skills/planning-prd.md +144 -0
- package/skills/planning-project-assessment.md +182 -0
- package/skills/planning-project-setup-info-local.md +128 -0
- package/skills/planning-project-workflow-analysis-blueprint-generator.md +294 -0
- package/skills/planning-service-oriented-architecture.md +248 -0
- package/skills/planning-spec-to-backlog.md +544 -0
- package/skills/planning-technology-stack-blueprint-generator.md +243 -0
- package/skills/planning-update-implementation-plan.md +158 -0
- package/skills/planning-update-specification.md +128 -0
- package/skills/planning-what-context-needed.md +40 -0
- package/skills/planning-writing-plans.md +153 -0
- package/skills/prepare-application.md +81 -0
- package/skills/productivity-apple-notes.md +78 -0
- package/skills/productivity-apple-reminders.md +119 -0
- package/skills/productivity-capture-tasks-from-meeting-notes.md +680 -0
- package/skills/productivity-daily-prep.md +156 -0
- package/skills/productivity-email-drafter.md +101 -0
- package/skills/productivity-hr-onboarding.md +53 -0
- package/skills/productivity-things-mac.md +87 -0
- package/skills/productivity-update.md +169 -0
- package/skills/reminders.md +109 -0
- package/skills/research-dossier-collect.md +71 -0
- package/skills/research-kg-extract.md +37 -0
- package/skills/research-openai-docs.md +89 -0
- package/skills/research-research-add-items.md +31 -0
- package/skills/research-research-report.md +94 -0
- package/skills/research-research-synthesize.md +63 -0
- package/skills/research-summarize.md +88 -0
- package/skills/research-transformers-js.md +635 -0
- package/skills/research.md +119 -0
- package/skills/security-ai-prompt-engineering-safety-review.md +231 -0
- package/skills/security-attack-path-analysis.md +182 -0
- package/skills/security-gdpr-compliant.md +284 -0
- package/skills/security-mcp-security-audit.md +279 -0
- package/skills/security-pii-detect.md +31 -0
- package/skills/security-secret-scanning.md +243 -0
- package/skills/security-security-best-practices.md +87 -0
- package/skills/security-security-ownership-map.md +207 -0
- package/skills/security-security-review.md +169 -0
- package/skills/security-security-scan.md +138 -0
- package/skills/security-security-threat-model.md +82 -0
- package/skills/security-threat-model-analyst.md +76 -0
- package/skills/sysmon.md +181 -0
- package/skills/system-arch-linux-triage.md +32 -0
- package/skills/system-centos-linux-triage.md +32 -0
- package/skills/system-debian-linux-triage.md +32 -0
- package/skills/system-fedora-linux-triage.md +32 -0
- package/skills/system-geofeed-tuner.md +865 -0
- package/skills/system-iot-anomalies.md +15 -0
- package/skills/system-iot-firmware.md +16 -0
- package/skills/system-iot-fleet.md +14 -0
- package/skills/system-iot-register.md +19 -0
- package/skills/system-iot-witness-verify.md +15 -0
- package/skills/system-tmux.md +171 -0
- package/skills/system-window-management.md +228 -0
- package/skills/task-management.md +90 -0
- package/skills/tasks.md +102 -0
- package/skills/test-coverage.md +188 -0
- package/skills/ux-ui.md +128 -0
- package/skills/web.md +186 -0
- package/skills/workflow-act-on-feedback.md +15 -0
- package/skills/workflow-automate-this.md +245 -0
- package/skills/workflow-autoresearch.md +276 -0
- package/skills/workflow-coding-agent.md +317 -0
- package/skills/workflow-deep-research.md +44 -0
- package/skills/workflow-dispatching-parallel-agents.md +183 -0
- package/skills/workflow-eval-driven-dev.md +148 -0
- package/skills/workflow-executing-plans.md +71 -0
- package/skills/workflow-mentoring-juniors.md +311 -0
- package/skills/workflow-receiving-code-review.md +214 -0
- package/skills/workflow-repo-story-time.md +155 -0
- package/skills/workflow-requesting-code-review.md +104 -0
- package/skills/workflow-session-report.md +43 -0
- package/skills/workflow-structured-autonomy-generate.md +126 -0
- package/skills/workflow-subagent-driven-development.md +280 -0
- package/skills/writing.md +106 -0
- package/src/agent.js +0 -0
- package/src/browser.js +297 -0
- package/src/cli.js +25 -4
- package/src/code-reviewer.js +119 -0
- package/src/completions.js +1 -1
- package/src/control.js +222 -30
- package/src/coordinator.js +303 -0
- package/src/correction.js +29 -8
- package/src/edit-tracker.js +21 -0
- package/src/edit-viewer.js +414 -0
- package/src/endpoints.js +64 -15
- package/src/index.js +45 -11
- package/src/llm.js +86 -2
- package/src/mcp-client.js +416 -0
- package/src/memory.js +182 -0
- package/src/planner.js +216 -0
- package/src/rules.js +90 -0
- package/src/self-commands.js +757 -0
- package/src/services/voice.js +10 -7
- package/src/session-search.js +427 -0
- package/src/session.js +487 -99
- package/src/shmakk-server.js +91 -0
- package/src/skills.js +410 -3
- package/src/subagent.js +4 -1
- package/src/system-prompt.js +13 -5
- package/src/task-file.js +114 -0
- package/src/taskClassifier.js +246 -0
- package/src/team.js +752 -0
- package/src/tools.js +142 -21
- package/src/web.js +35 -5
- package/src/workflows.js +261 -0
- package/src/workspace-index.js +25 -6
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: documents
|
|
3
|
+
version: 1
|
|
4
|
+
category: files
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Document Analysis & Processing
|
|
8
|
+
|
|
9
|
+
Read, summarize, extract, and process PDF, Word, and other document formats.
|
|
10
|
+
|
|
11
|
+
## When to use this skill
|
|
12
|
+
|
|
13
|
+
- User wants to read or summarize a PDF, Word doc, or other document
|
|
14
|
+
- User wants to extract specific information from a document
|
|
15
|
+
- User wants to compare two versions of a document
|
|
16
|
+
- User mentions "PDF", "document", "report", "paper", "contract", "file"
|
|
17
|
+
|
|
18
|
+
## Prerequisites
|
|
19
|
+
|
|
20
|
+
Check available tools:
|
|
21
|
+
```
|
|
22
|
+
which pdftotext pdfinfo pandoc tesseract libreoffice 2>/dev/null
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
- `pdftotext` (poppler-utils) — extract text from PDF
|
|
26
|
+
- `pandoc` — convert between document formats
|
|
27
|
+
- `tesseract` — OCR for scanned PDFs/images
|
|
28
|
+
- `libreoffice` — convert Word/Excel files to text/PDF
|
|
29
|
+
|
|
30
|
+
If `pdftotext` is missing: `sudo apt install poppler-utils` or `brew install poppler`
|
|
31
|
+
|
|
32
|
+
## Procedure
|
|
33
|
+
|
|
34
|
+
### Read a PDF
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
pdftotext document.pdf - # output to stdout
|
|
38
|
+
pdftotext -f 1 -l 5 document.pdf - # pages 1-5 only
|
|
39
|
+
pdfinfo document.pdf # metadata: pages, title, author, size
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
For scanned PDFs (no selectable text), use OCR:
|
|
43
|
+
```
|
|
44
|
+
tesseract document.pdf output_base txt
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Read a Word document
|
|
48
|
+
|
|
49
|
+
Convert to text first:
|
|
50
|
+
```
|
|
51
|
+
pandoc document.docx -t plain
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Or to markdown (preserves structure):
|
|
55
|
+
```
|
|
56
|
+
pandoc document.docx -t markdown
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Read spreadsheets
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
pandoc spreadsheet.xlsx -t plain
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Or use `libreoffice --headless --convert-to csv file.xlsx`
|
|
66
|
+
|
|
67
|
+
### Summarize a long document
|
|
68
|
+
|
|
69
|
+
1. Extract the full text
|
|
70
|
+
2. If very long (>10k words), extract: title, table of contents, introduction, conclusion/executive summary, headings
|
|
71
|
+
3. Build the summary from these key sections plus any explicitly requested detail
|
|
72
|
+
|
|
73
|
+
### Compare two document versions
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
diff <(pdftotext v1.pdf -) <(pdftotext v2.pdf -)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
For Word docs: convert both to markdown first, then diff.
|
|
80
|
+
|
|
81
|
+
### Find specific information in a document
|
|
82
|
+
|
|
83
|
+
After extracting text, search within it:
|
|
84
|
+
```
|
|
85
|
+
pdftotext document.pdf - | grep -i "search term" -A 3 -B 3
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Output format
|
|
89
|
+
|
|
90
|
+
**For summaries:**
|
|
91
|
+
```
|
|
92
|
+
## Document Summary: [filename]
|
|
93
|
+
|
|
94
|
+
**Type:** PDF, 24 pages
|
|
95
|
+
**Author:** John Smith, 2024-01-15
|
|
96
|
+
|
|
97
|
+
**Overview:** [1-2 sentence description of what the document is]
|
|
98
|
+
|
|
99
|
+
**Key Points:**
|
|
100
|
+
- Point 1
|
|
101
|
+
- Point 2
|
|
102
|
+
- Point 3
|
|
103
|
+
|
|
104
|
+
**Notable Details:** [anything specific the user should know]
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**For extraction:** present the extracted information cleanly, citing the page number where found.
|
|
108
|
+
|
|
109
|
+
## Pitfalls
|
|
110
|
+
|
|
111
|
+
- Scanned PDFs require OCR — `pdftotext` returns empty or garbled output; detect this and switch to `tesseract`
|
|
112
|
+
- Password-protected PDFs: `pdftotext` will fail; inform user and ask them to provide an unlocked version
|
|
113
|
+
- Large documents: extract just the needed sections rather than the entire text to avoid context overload
|
|
114
|
+
- Tables in PDFs often don't extract cleanly — warn user if table data may be malformatted
|
|
115
|
+
- Legal documents: extract verbatim quotes for important clauses rather than paraphrasing
|
|
116
|
+
|
|
117
|
+
## Verification
|
|
118
|
+
|
|
119
|
+
After extraction: check that the text makes sense (not garbled) before proceeding with analysis.
|
|
120
|
+
If extracting page ranges, verify page count with `pdfinfo` first.
|
package/skills/email.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: email
|
|
3
|
+
version: 1
|
|
4
|
+
category: productivity
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Email Handling
|
|
8
|
+
|
|
9
|
+
Read, search, compose, and send email via CLI email clients.
|
|
10
|
+
|
|
11
|
+
## When to use this skill
|
|
12
|
+
|
|
13
|
+
- User wants to check their inbox or find a specific email
|
|
14
|
+
- User wants to compose or reply to an email
|
|
15
|
+
- User asks about an email thread or conversation
|
|
16
|
+
- User mentions "email", "inbox", "message", "send", "reply", "mail"
|
|
17
|
+
|
|
18
|
+
## Prerequisites
|
|
19
|
+
|
|
20
|
+
Check what's available:
|
|
21
|
+
```
|
|
22
|
+
which himalaya mutt neomutt aerc msmtp 2>/dev/null
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**himalaya** is the recommended CLI email client — lightweight, fast, works with IMAP/SMTP.
|
|
26
|
+
**mutt/neomutt** — powerful but requires more configuration.
|
|
27
|
+
**msmtp** — for sending only, pairs with any client.
|
|
28
|
+
|
|
29
|
+
If none installed, suggest: `himalaya` (`cargo install himalaya` or package manager).
|
|
30
|
+
|
|
31
|
+
For sending only, `msmtp` with `~/.msmtprc` configured is the simplest path.
|
|
32
|
+
|
|
33
|
+
## Procedure
|
|
34
|
+
|
|
35
|
+
### Check inbox (himalaya)
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
himalaya list # list messages in inbox
|
|
39
|
+
himalaya list --folder Sent # list sent folder
|
|
40
|
+
himalaya search "from:alex" # search by sender
|
|
41
|
+
himalaya search "subject:invoice" "since:1 week"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Read a message
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
himalaya read <id> # read message by ID
|
|
48
|
+
himalaya attachment download <id> <filename>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Compose and send
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
himalaya write # interactive compose
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Or pipe directly:
|
|
58
|
+
```
|
|
59
|
+
himalaya send <<EOF
|
|
60
|
+
From: user@example.com
|
|
61
|
+
To: recipient@example.com
|
|
62
|
+
Subject: Meeting tomorrow
|
|
63
|
+
|
|
64
|
+
Hi,
|
|
65
|
+
|
|
66
|
+
Can we meet tomorrow at 2pm?
|
|
67
|
+
|
|
68
|
+
Best,
|
|
69
|
+
Marcus
|
|
70
|
+
EOF
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Reply to a message
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
himalaya reply <id>
|
|
77
|
+
himalaya reply-all <id>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### With mutt/neomutt
|
|
81
|
+
|
|
82
|
+
For reading: launch `neomutt` interactively.
|
|
83
|
+
For sending: `echo "body" | neomutt -s "Subject" -a attachment.pdf -- recipient@example.com`
|
|
84
|
+
|
|
85
|
+
### With msmtp (send only)
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
msmtp recipient@example.com < message.txt
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Output format
|
|
92
|
+
|
|
93
|
+
When summarizing inbox:
|
|
94
|
+
```
|
|
95
|
+
INBOX — 3 unread
|
|
96
|
+
|
|
97
|
+
1. [unread] Alex Chen — "PR review feedback" (2h ago)
|
|
98
|
+
2. [unread] GitHub — "Build failed: main" (4h ago)
|
|
99
|
+
3. Client A — "Invoice received" (yesterday)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
When summarizing a thread, extract the key points and action items.
|
|
103
|
+
|
|
104
|
+
## Pitfalls
|
|
105
|
+
|
|
106
|
+
- himalaya requires an account configured in `~/.config/himalaya/config.toml` — if not set up, prompt user to configure it first
|
|
107
|
+
- IMAP credentials should never be shown or logged; reference config paths only
|
|
108
|
+
- Large attachments: warn user before downloading
|
|
109
|
+
- Do NOT send emails without explicit user confirmation of the recipient, subject, and content
|
|
110
|
+
|
|
111
|
+
## Verification
|
|
112
|
+
|
|
113
|
+
After sending: confirm with `himalaya list --folder Sent` that the message appears.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: expenses
|
|
3
|
+
version: 1
|
|
4
|
+
category: business
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Expense Tracking & Analysis
|
|
8
|
+
|
|
9
|
+
Track, categorize, and analyze business or personal expenses for reporting and tax purposes.
|
|
10
|
+
|
|
11
|
+
## When to use this skill
|
|
12
|
+
|
|
13
|
+
- User wants to track or log an expense
|
|
14
|
+
- User wants to generate an expense report
|
|
15
|
+
- User wants to see spending by category over a period
|
|
16
|
+
- User mentions "expense", "receipt", "reimbursement", "claim", "spend"
|
|
17
|
+
|
|
18
|
+
## Procedure
|
|
19
|
+
|
|
20
|
+
### Expense log format
|
|
21
|
+
|
|
22
|
+
Maintain a simple CSV at `~/expenses/expenses.csv`:
|
|
23
|
+
```
|
|
24
|
+
date,amount,currency,category,vendor,description,receipt,reimbursable
|
|
25
|
+
2024-01-15,42.50,EUR,Meals,Restaurang Oaxen,Client lunch with Alex,receipt-001.jpg,yes
|
|
26
|
+
2024-01-16,29.90,EUR,Transport,SL,Monthly transit pass,,no
|
|
27
|
+
2024-01-17,120.00,EUR,Software,Adobe,Creative Cloud annual,,yes
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Log a new expense
|
|
31
|
+
|
|
32
|
+
Append to the CSV:
|
|
33
|
+
```
|
|
34
|
+
echo "2024-01-15,42.50,EUR,Meals,Restaurang Oaxen,Client lunch,,yes" >> ~/expenses/expenses.csv
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Or write to file with read_file + edit_file to verify format is correct.
|
|
38
|
+
|
|
39
|
+
### Generate expense report
|
|
40
|
+
|
|
41
|
+
**Summary by category:**
|
|
42
|
+
```python
|
|
43
|
+
import csv
|
|
44
|
+
from collections import defaultdict
|
|
45
|
+
|
|
46
|
+
with open(os.path.expanduser('~/expenses/expenses.csv')) as f:
|
|
47
|
+
rows = list(csv.DictReader(f))
|
|
48
|
+
|
|
49
|
+
# Filter by date range
|
|
50
|
+
from_date = "2024-01-01"
|
|
51
|
+
to_date = "2024-01-31"
|
|
52
|
+
rows = [r for r in rows if from_date <= r['date'] <= to_date]
|
|
53
|
+
|
|
54
|
+
# Sum by category
|
|
55
|
+
by_category = defaultdict(float)
|
|
56
|
+
reimbursable_total = 0.0
|
|
57
|
+
for row in rows:
|
|
58
|
+
by_category[row['category']] += float(row['amount'])
|
|
59
|
+
if row.get('reimbursable', '').lower() == 'yes':
|
|
60
|
+
reimbursable_total += float(row['amount'])
|
|
61
|
+
|
|
62
|
+
total = sum(by_category.values())
|
|
63
|
+
|
|
64
|
+
print(f"EXPENSE REPORT: {from_date} to {to_date}\n")
|
|
65
|
+
print(f"{'Category':<20} {'Amount':>10}")
|
|
66
|
+
print("-" * 32)
|
|
67
|
+
for cat, amount in sorted(by_category.items(), key=lambda x: -x[1]):
|
|
68
|
+
print(f"{cat:<20} {amount:>9.2f} EUR")
|
|
69
|
+
print("-" * 32)
|
|
70
|
+
print(f"{'Total':<20} {total:>9.2f} EUR")
|
|
71
|
+
print(f"{'Reimbursable':<20} {reimbursable_total:>9.2f} EUR")
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Generate reimbursement report
|
|
75
|
+
|
|
76
|
+
Filter to reimbursable expenses only and produce a report for submission:
|
|
77
|
+
|
|
78
|
+
```python
|
|
79
|
+
reimbursable = [r for r in rows if r.get('reimbursable', '').lower() == 'yes']
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Format as a table for submission to employer/client.
|
|
83
|
+
|
|
84
|
+
### Organize receipts
|
|
85
|
+
|
|
86
|
+
Store receipt images/PDFs in `~/expenses/receipts/YYYY-MM/`:
|
|
87
|
+
```
|
|
88
|
+
mkdir -p ~/expenses/receipts/2024-01/
|
|
89
|
+
# Move receipt file into the directory, name matching expense
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Tax-deductible categories
|
|
93
|
+
|
|
94
|
+
For self-employed / freelance (Swedish context):
|
|
95
|
+
- Software & subscriptions (100% deductible for business use)
|
|
96
|
+
- Client meals (75% deductible in Sweden, requires documentation of who was present)
|
|
97
|
+
- Home office (proportional — discuss with accountant)
|
|
98
|
+
- Transport to client sites (deductible)
|
|
99
|
+
- Professional development (courses, books) (deductible)
|
|
100
|
+
- Equipment (may need to be depreciated over multiple years)
|
|
101
|
+
|
|
102
|
+
Flag transactions by deductibility for easier tax filing.
|
|
103
|
+
|
|
104
|
+
## Output format
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
EXPENSE REPORT — January 2024
|
|
108
|
+
|
|
109
|
+
Category Count Amount
|
|
110
|
+
──────────────────────────────────
|
|
111
|
+
Software 3 €149.90
|
|
112
|
+
Meals 4 €187.50
|
|
113
|
+
Transport 5 €118.00
|
|
114
|
+
Equipment 1 €249.00
|
|
115
|
+
──────────────────────────────────
|
|
116
|
+
Total 13 €704.40
|
|
117
|
+
|
|
118
|
+
Reimbursable: €436.90 ← submit to client
|
|
119
|
+
Non-reimbursable: €267.50
|
|
120
|
+
|
|
121
|
+
REIMBURSABLE EXPENSES (for submission)
|
|
122
|
+
Date Amount Vendor Description
|
|
123
|
+
──────────────────────────────────────────────────────
|
|
124
|
+
2024-01-15 €42.50 Restaurang Oaxen Client lunch (Alex Chen)
|
|
125
|
+
2024-01-18 €249.00 Apple Store External monitor for project
|
|
126
|
+
2024-01-22 €89.00 Adobe CC subscription (billable)
|
|
127
|
+
2024-01-28 €56.40 SAS Flight to client (Stockholm–Malmö)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Pitfalls
|
|
131
|
+
|
|
132
|
+
- Always note who was present at client meals (required for meal deduction)
|
|
133
|
+
- Keep digital copies of all receipts — original paper receipts must be kept for 7 years in Sweden
|
|
134
|
+
- Currency: record original currency AND amount (don't convert on the fly — use bank statement rate for tax purposes)
|
|
135
|
+
- Separate business and personal expenses — don't mix in the same account if avoidable
|
|
136
|
+
|
|
137
|
+
## Verification
|
|
138
|
+
|
|
139
|
+
After generating a report: sum the per-category totals manually and verify they match the total row.
|
|
140
|
+
Cross-check reimbursable total against individual reimbursable items.
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: file-ops
|
|
3
|
+
version: 1
|
|
4
|
+
category: system
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# File Operations & Organization
|
|
8
|
+
|
|
9
|
+
Bulk rename, reorganize, search, deduplicate, and manage files across directories.
|
|
10
|
+
|
|
11
|
+
## When to use this skill
|
|
12
|
+
|
|
13
|
+
- User wants to rename many files following a pattern
|
|
14
|
+
- User wants to organize files by type, date, or category
|
|
15
|
+
- User wants to find duplicate files
|
|
16
|
+
- User wants to find files matching certain criteria
|
|
17
|
+
- User mentions "rename files", "organize", "move files", "find duplicates", "bulk"
|
|
18
|
+
|
|
19
|
+
## Procedure
|
|
20
|
+
|
|
21
|
+
### Find files by criteria
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
find . -name "*.jpg" -type f # by extension
|
|
25
|
+
find . -name "*.log" -mtime +30 -type f # older than 30 days
|
|
26
|
+
find . -size +50M -type f # larger than 50MB
|
|
27
|
+
find . -empty -type f # empty files
|
|
28
|
+
find . -newer reference.txt -type f # modified after a file
|
|
29
|
+
find ~/Downloads -mtime +90 -type f # old downloads
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Bulk rename files
|
|
33
|
+
|
|
34
|
+
**Preview first (ALWAYS preview before executing):**
|
|
35
|
+
|
|
36
|
+
Pattern-based rename with `rename` (Perl rename, common on Linux):
|
|
37
|
+
```
|
|
38
|
+
rename -n 's/old/new/' *.txt # -n is dry run, shows what would change
|
|
39
|
+
rename 's/old/new/' *.txt # actual rename
|
|
40
|
+
rename 's/ /_/g' * # replace spaces with underscores
|
|
41
|
+
rename 's/^/prefix_/' *.jpg # add prefix
|
|
42
|
+
rename 's/\.jpeg$/.jpg/' *.jpeg # normalize extension
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
With `mv` and a loop (when rename isn't available):
|
|
46
|
+
```
|
|
47
|
+
for f in *.txt; do mv -n "$f" "${f/old/new}"; done # -n = no-clobber
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Date-based rename (add date prefix):
|
|
51
|
+
```
|
|
52
|
+
for f in *.jpg; do
|
|
53
|
+
date=$(stat -c %y "$f" | cut -d' ' -f1)
|
|
54
|
+
mv -n "$f" "${date}_${f}"
|
|
55
|
+
done
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Organize files by type
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
mkdir -p organized/{images,documents,videos,audio,archives,other}
|
|
62
|
+
|
|
63
|
+
for f in *; do
|
|
64
|
+
case "${f##*.}" in
|
|
65
|
+
jpg|jpeg|png|gif|webp|svg) mv "$f" organized/images/ ;;
|
|
66
|
+
pdf|doc|docx|odt|txt|md) mv "$f" organized/documents/ ;;
|
|
67
|
+
mp4|mkv|avi|mov|webm) mv "$f" organized/videos/ ;;
|
|
68
|
+
mp3|flac|wav|ogg|m4a) mv "$f" organized/audio/ ;;
|
|
69
|
+
zip|tar|gz|bz2|7z|rar) mv "$f" organized/archives/ ;;
|
|
70
|
+
*) [ -f "$f" ] && mv "$f" organized/other/ ;;
|
|
71
|
+
esac
|
|
72
|
+
done
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Organize by date (year/month)
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
for f in *.jpg; do
|
|
79
|
+
year=$(stat -c %y "$f" | cut -d'-' -f1)
|
|
80
|
+
month=$(stat -c %y "$f" | cut -d'-' -f2)
|
|
81
|
+
mkdir -p "$year/$month"
|
|
82
|
+
mv -n "$f" "$year/$month/"
|
|
83
|
+
done
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Find and handle duplicates
|
|
87
|
+
|
|
88
|
+
Using `fdupes` (most reliable):
|
|
89
|
+
```
|
|
90
|
+
fdupes -r . # find duplicates recursively
|
|
91
|
+
fdupes -r -d . # interactively delete duplicates (keeps first)
|
|
92
|
+
fdupes -r -f . | tail -n +2 # list all but the first of each group
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Without fdupes (using md5sum):
|
|
96
|
+
```
|
|
97
|
+
find . -type f -exec md5sum {} \; | sort | awk 'seen[$1]++ {print $2}' > duplicates.txt
|
|
98
|
+
cat duplicates.txt # review before deleting
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Clean up specific file types
|
|
102
|
+
|
|
103
|
+
Find and remove old log files:
|
|
104
|
+
```
|
|
105
|
+
find . -name "*.log" -mtime +30 -exec ls -lh {} \; # preview
|
|
106
|
+
find . -name "*.log" -mtime +30 -delete # delete (careful!)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Find and compress old files:
|
|
110
|
+
```
|
|
111
|
+
find ~/Documents -mtime +365 -type f -exec gzip {} \;
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Sync or mirror directories
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
rsync -av --dry-run source/ destination/ # preview
|
|
118
|
+
rsync -av source/ destination/ # execute
|
|
119
|
+
rsync -av --delete source/ destination/ # mirror (deletes files not in source!)
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Output format
|
|
123
|
+
|
|
124
|
+
When previewing bulk operations, always show the full list of changes before asking the user to confirm:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
PREVIEW: Rename 23 files (replace spaces with underscores)
|
|
128
|
+
|
|
129
|
+
"my photo 001.jpg" → "my_photo_001.jpg"
|
|
130
|
+
"my photo 002.jpg" → "my_photo_002.jpg"
|
|
131
|
+
"meeting notes.docx" → "meeting_notes.docx"
|
|
132
|
+
... (20 more)
|
|
133
|
+
|
|
134
|
+
Proceed? This cannot be easily undone.
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Pitfalls
|
|
138
|
+
|
|
139
|
+
- **ALWAYS show a preview before executing bulk operations** — mistakes are hard to undo
|
|
140
|
+
- Use `-n` (no-clobber) with `mv` to prevent overwriting existing files
|
|
141
|
+
- `find -delete` is permanent — no trash. Use `ls` or move to a temp dir first
|
|
142
|
+
- `rsync --delete` will delete files at destination that don't exist at source — confirm this is intended
|
|
143
|
+
- Beware of files with spaces or special characters in names — always quote `"$f"` in loops
|
|
144
|
+
- Check available disk space before large copy/move operations: `df -h`
|
|
145
|
+
|
|
146
|
+
## Verification
|
|
147
|
+
|
|
148
|
+
After bulk rename: spot-check 3-5 files to confirm names are correct.
|
|
149
|
+
After organize: verify files landed in the right directories with `ls` on each output directory.
|