chore: repo cleanup
This commit is contained in:
@@ -1,315 +0,0 @@
|
||||
---
|
||||
name: basecamp
|
||||
description: "Use when: (1) Managing Basecamp projects, (2) Working with Basecamp todos and tasks, (3) Reading/updating message boards and campfire, (4) Managing card tables (kanban), (5) Handling email forwards/inbox, (6) Setting up webhooks for automation. Triggers: 'Basecamp', 'project', 'todo', 'card table', 'campfire', 'message board', 'webhook', 'inbox', 'email forwards'."
|
||||
compatibility: opencode
|
||||
---
|
||||
|
||||
# Basecamp
|
||||
|
||||
Basecamp 3 project management integration via MCP server. Provides comprehensive access to projects, todos, messages, card tables (kanban), campfire, inbox, documents, and webhooks.
|
||||
|
||||
## Core Workflows
|
||||
|
||||
### Finding Projects and Todos
|
||||
|
||||
**List all projects:**
|
||||
```bash
|
||||
# Get all accessible Basecamp projects
|
||||
get_projects
|
||||
```
|
||||
|
||||
**Get project details:**
|
||||
```bash
|
||||
# Get specific project information including status, tools, and access level
|
||||
get_project --project_id <id>
|
||||
```
|
||||
|
||||
**Explore todos:**
|
||||
```bash
|
||||
# Get all todo lists in a project
|
||||
get_todolists --project_id <id>
|
||||
|
||||
# Get all todos from a specific todo list (handles pagination automatically)
|
||||
get_todos --recording_id <todo_list_id>
|
||||
|
||||
# Search across projects for todos/messages containing keywords
|
||||
search_basecamp --query <search_term>
|
||||
```
|
||||
|
||||
### Managing Card Tables (Kanban)
|
||||
|
||||
**Card tables** are Basecamp's kanban-style workflow management tool.
|
||||
|
||||
**Explore card table:**
|
||||
```bash
|
||||
# Get card table for a project
|
||||
get_card_table --project_id <id>
|
||||
|
||||
# Get all columns in a card table
|
||||
get_columns --card_table_id <id>
|
||||
|
||||
# Get all cards in a specific column
|
||||
get_cards --column_id <id>
|
||||
```
|
||||
|
||||
**Manage columns:**
|
||||
```bash
|
||||
# Create new column (e.g., "In Progress", "Done")
|
||||
create_column --card_table_id <id> --title "Column Name"
|
||||
|
||||
# Update column title
|
||||
update_column --column_id <id> --title "New Title"
|
||||
|
||||
# Move column to different position
|
||||
move_column --column_id <id> --position 3
|
||||
|
||||
# Update column color
|
||||
update_column_color --column_id <id> --color "red"
|
||||
|
||||
# Put column on hold (freeze work)
|
||||
put_column_on_hold --column_id <id>
|
||||
|
||||
# Remove hold from column (unfreeze work)
|
||||
remove_column_hold --column_id <id>
|
||||
```
|
||||
|
||||
**Manage cards:**
|
||||
```bash
|
||||
# Create new card in a column
|
||||
create_card --column_id <id> --title "Task Name" --content "Description"
|
||||
|
||||
# Update card details
|
||||
update_card --card_id <id> --title "Updated Title" --content "New content"
|
||||
|
||||
# Move card to different column
|
||||
move_card --card_id <id> --to_column_id <new_column_id>
|
||||
|
||||
# Mark card as complete
|
||||
complete_card --card_id <id>
|
||||
|
||||
# Mark card as incomplete
|
||||
uncomplete_card --card_id <id>
|
||||
```
|
||||
|
||||
**Manage card steps (sub-tasks):**
|
||||
```bash
|
||||
# Get all steps for a card
|
||||
get_card_steps --card_id <id>
|
||||
|
||||
# Create new step
|
||||
create_card_step --card_id <id> --content "Sub-task description"
|
||||
|
||||
# Update step
|
||||
update_card_step --step_id <id> --content "Updated description"
|
||||
|
||||
# Delete step
|
||||
delete_card_step --step_id <id>
|
||||
|
||||
# Mark step as complete
|
||||
complete_card_step --step_id <id>
|
||||
|
||||
# Mark step as incomplete
|
||||
uncomplete_card_step --step_id <id>
|
||||
```
|
||||
|
||||
### Working with Messages and Campfire
|
||||
|
||||
**Message board:**
|
||||
```bash
|
||||
# Get message board for a project
|
||||
get_message_board --project_id <id>
|
||||
|
||||
# Get all messages from a project
|
||||
get_messages --project_id <id>
|
||||
|
||||
# Get specific message
|
||||
get_message --message_id <id>
|
||||
```
|
||||
|
||||
**Campfire (team chat):**
|
||||
```bash
|
||||
# Get recent campfire lines (messages)
|
||||
get_campfire_lines --campfire_id <id>
|
||||
```
|
||||
|
||||
**Comments:**
|
||||
```bash
|
||||
# Get comments for any Basecamp item (message, todo, card, etc.)
|
||||
get_comments --recording_id <id>
|
||||
|
||||
# Create a comment
|
||||
create_comment --recording_id <id> --content "Your comment"
|
||||
```
|
||||
|
||||
### Managing Inbox (Email Forwards)
|
||||
|
||||
**Inbox** handles email forwarding to Basecamp projects.
|
||||
|
||||
**Explore inbox:**
|
||||
```bash
|
||||
# Get inbox for a project (email forwards container)
|
||||
get_inbox --project_id <id>
|
||||
|
||||
# Get all forwarded emails from a project's inbox
|
||||
get_forwards --project_id <id>
|
||||
|
||||
# Get specific forwarded email
|
||||
get_forward --forward_id <id>
|
||||
|
||||
# Get all replies to a forwarded email
|
||||
get_inbox_replies --forward_id <id>
|
||||
|
||||
# Get specific reply
|
||||
get_inbox_reply --reply_id <id>
|
||||
```
|
||||
|
||||
**Manage forwards:**
|
||||
```bash
|
||||
# Move forwarded email to trash
|
||||
trash_forward --forward_id <id>
|
||||
```
|
||||
|
||||
### Documents
|
||||
|
||||
**Manage documents:**
|
||||
```bash
|
||||
# List documents in a vault
|
||||
get_documents --vault_id <id>
|
||||
|
||||
# Get specific document
|
||||
get_document --document_id <id>
|
||||
|
||||
# Create new document
|
||||
create_document --vault_id <id> --title "Document Title" --content "Document content"
|
||||
|
||||
# Update document
|
||||
update_document --document_id <id> --title "Updated Title" --content "New content"
|
||||
|
||||
# Move document to trash
|
||||
trash_document --document_id <id>
|
||||
```
|
||||
|
||||
### Webhooks and Automation
|
||||
|
||||
**Webhooks** enable automation by triggering external services on Basecamp events.
|
||||
|
||||
**Manage webhooks:**
|
||||
```bash
|
||||
# List webhooks for a project
|
||||
get_webhooks --project_id <id>
|
||||
|
||||
# Create webhook
|
||||
create_webhook --project_id <id> --callback_url "https://your-service.com/webhook" --types "TodoCreated,TodoCompleted"
|
||||
|
||||
# Delete webhook
|
||||
delete_webhook --webhook_id <id>
|
||||
```
|
||||
|
||||
### Daily Check-ins
|
||||
|
||||
**Project check-ins:**
|
||||
```bash
|
||||
# Get daily check-in questions for a project
|
||||
get_daily_check_ins --project_id <id>
|
||||
|
||||
# Get answers to daily check-in questions
|
||||
get_question_answers --question_id <id>
|
||||
```
|
||||
|
||||
### Attachments and Events
|
||||
|
||||
**Upload and track:**
|
||||
```bash
|
||||
# Upload file as attachment
|
||||
create_attachment --recording_id <id> --file_path "/path/to/file"
|
||||
|
||||
# Get events for a recording
|
||||
get_events --recording_id <id>
|
||||
```
|
||||
|
||||
## Integration with Other Skills
|
||||
|
||||
### Hermes (Work Communication)
|
||||
|
||||
Hermes loads this skill when working with Basecamp projects. Common workflows:
|
||||
|
||||
| User Request | Hermes Action | Basecamp Tools Used |
|
||||
|--------------|---------------|---------------------|
|
||||
| "Create a task in Marketing project" | Create card/todo | `create_card`, `get_columns`, `create_column` |
|
||||
| "Check project updates" | Read messages/campfire | `get_messages`, `get_campfire_lines`, `get_comments` |
|
||||
| "Update my tasks" | Move cards, update status | `move_card`, `complete_card`, `update_card` |
|
||||
| "Add comment to discussion" | Post comment | `create_comment`, `get_comments` |
|
||||
| "Review project inbox" | Check email forwards | `get_inbox`, `get_forwards`, `get_inbox_replies` |
|
||||
|
||||
### Workflow Patterns
|
||||
|
||||
**Project setup:**
|
||||
1. Use `get_projects` to find existing projects
|
||||
2. Use `get_project` to verify project details
|
||||
3. Use `get_todolists` or `get_card_table` to understand project structure
|
||||
|
||||
**Task management:**
|
||||
1. Use `get_todolists` or `get_columns` to find appropriate location
|
||||
2. Use `create_card` or todo creation to add work
|
||||
3. Use `move_card`, `complete_card` to update status
|
||||
4. Use `get_card_steps` and `create_card_step` for sub-task breakdown
|
||||
|
||||
**Communication:**
|
||||
1. Use `get_messages` or `get_campfire_lines` to read discussions
|
||||
2. Use `create_comment` to contribute to existing items
|
||||
3. Use `search_basecamp` to find relevant content
|
||||
|
||||
**Automation:**
|
||||
1. Use `get_webhooks` to check existing integrations
|
||||
2. Use `create_webhook` to set up external notifications
|
||||
|
||||
## Tool Organization by Category
|
||||
|
||||
**Projects & Lists:**
|
||||
- `get_projects`, `get_project`, `get_todolists`, `get_todos`, `search_basecamp`
|
||||
|
||||
**Card Table (Kanban):**
|
||||
- `get_card_table`, `get_columns`, `get_column`, `create_column`, `update_column`, `move_column`, `update_column_color`, `put_column_on_hold`, `remove_column_hold`, `watch_column`, `unwatch_column`, `get_cards`, `get_card`, `create_card`, `update_card`, `move_card`, `complete_card`, `uncomplete_card`, `get_card_steps`, `create_card_step`, `get_card_step`, `update_card_step`, `delete_card_step`, `complete_card_step`, `uncomplete_card_step`
|
||||
|
||||
**Messages & Communication:**
|
||||
- `get_message_board`, `get_messages`, `get_message`, `get_campfire_lines`, `get_comments`, `create_comment`
|
||||
|
||||
**Inbox (Email Forwards):**
|
||||
- `get_inbox`, `get_forwards`, `get_forward`, `get_inbox_replies`, `get_inbox_reply`, `trash_forward`
|
||||
|
||||
**Documents:**
|
||||
- `get_documents`, `get_document`, `create_document`, `update_document`, `trash_document`
|
||||
|
||||
**Webhooks:**
|
||||
- `get_webhooks`, `create_webhook`, `delete_webhook`
|
||||
|
||||
**Other:**
|
||||
- `get_daily_check_ins`, `get_question_answers`, `create_attachment`, `get_events`
|
||||
|
||||
## Common Queries
|
||||
|
||||
**Finding the right project:**
|
||||
```bash
|
||||
# Use search to find projects by keyword
|
||||
search_basecamp --query "marketing"
|
||||
# Then inspect specific project
|
||||
get_project --project_id <id>
|
||||
```
|
||||
|
||||
**Understanding project structure:**
|
||||
```bash
|
||||
# Check which tools are available in a project
|
||||
get_project --project_id <id>
|
||||
# Project response includes tools: message_board, campfire, card_table, todolists, etc.
|
||||
```
|
||||
|
||||
**Bulk operations:**
|
||||
```bash
|
||||
# Get all todos across a project (pagination handled automatically)
|
||||
get_todos --recording_id <todo_list_id>
|
||||
# Returns all pages of results
|
||||
|
||||
# Get all cards across all columns
|
||||
get_columns --card_table_id <id>
|
||||
get_cards --column_id <id> # Repeat for each column
|
||||
```
|
||||
@@ -1,42 +0,0 @@
|
||||
---
|
||||
name: frontend-design
|
||||
description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
|
||||
license: Complete terms in LICENSE.txt
|
||||
---
|
||||
|
||||
This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
|
||||
|
||||
The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.
|
||||
|
||||
## Design Thinking
|
||||
|
||||
Before coding, understand the context and commit to a BOLD aesthetic direction:
|
||||
- **Purpose**: What problem does this interface solve? Who uses it?
|
||||
- **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
|
||||
- **Constraints**: Technical requirements (framework, performance, accessibility).
|
||||
- **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
|
||||
|
||||
**CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
|
||||
|
||||
Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
|
||||
- Production-grade and functional
|
||||
- Visually striking and memorable
|
||||
- Cohesive with a clear aesthetic point-of-view
|
||||
- Meticulously refined in every detail
|
||||
|
||||
## Frontend Aesthetics Guidelines
|
||||
|
||||
Focus on:
|
||||
- **Typography**: Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts like Arial and Inter; opt instead for distinctive choices that elevate the frontend's aesthetics; unexpected, characterful font choices. Pair a distinctive display font with a refined body font.
|
||||
- **Color & Theme**: Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
|
||||
- **Motion**: Use animations for effects and micro-interactions. Prioritize CSS-only solutions for HTML. Use Motion library for React when available. Focus on high-impact moments: one well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions. Use scroll-triggering and hover states that surprise.
|
||||
- **Spatial Composition**: Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density.
|
||||
- **Backgrounds & Visual Details**: Create atmosphere and depth rather than defaulting to solid colors. Add contextual effects and textures that match the overall aesthetic. Apply creative forms like gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, and grain overlays.
|
||||
|
||||
NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.
|
||||
|
||||
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices (Space Grotesk, for example) across generations.
|
||||
|
||||
**IMPORTANT**: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.
|
||||
|
||||
Remember: the Coding Agent is capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
|
||||
@@ -1,123 +0,0 @@
|
||||
---
|
||||
name: kestra-flow
|
||||
description: Generate, modify, or debug Kestra Flow YAML by fetching the live flow schema and applying the same guardrails used by the Kestra AI Copilot. Use when users ask to create, write, update, or fix a Kestra flow.
|
||||
compatibility: Requires curl and network access to https://api.kestra.io/v1/plugins/schemas/flow. No Kestra instance required.
|
||||
---
|
||||
|
||||
# Kestra Flow Skill
|
||||
|
||||
Use this skill to generate production-ready Kestra Flow YAML grounded in the live schema.
|
||||
|
||||
## When to use
|
||||
|
||||
Use this skill when the request includes:
|
||||
|
||||
- Generating a new Kestra flow from scratch
|
||||
- Modifying, extending, or debugging an existing flow
|
||||
- Translating a workflow description into valid Kestra YAML
|
||||
|
||||
## Required inputs
|
||||
|
||||
- A description of the desired flow behavior
|
||||
- Namespace (and tenant ID if applicable)
|
||||
- Existing flow YAML if the request is a modification
|
||||
|
||||
## Workflow
|
||||
|
||||
### Step 1 — Fetch the flow schema
|
||||
|
||||
Fetch the full schema with `curl` and read it directly — do not pipe it through any interpreter:
|
||||
|
||||
```bash
|
||||
curl -s https://api.kestra.io/v1/plugins/schemas/flow
|
||||
```
|
||||
|
||||
Read the raw JSON output to validate every type, property name, and structure used in the output. Do not generate anything before the schema is available.
|
||||
|
||||
### Step 2 — Collect context
|
||||
|
||||
Identify from the user message or conversation:
|
||||
|
||||
- `id` — flow identifier (preserve if provided)
|
||||
- `namespace` — target namespace (preserve if provided)
|
||||
- Existing flow YAML (for modification requests)
|
||||
- Whether this is an **addition / deletion / modification** or a **full rewrite**
|
||||
|
||||
### Step 3 — Generate the YAML
|
||||
|
||||
Apply all generation rules below, then output raw YAML only.
|
||||
|
||||
## Generation rules
|
||||
|
||||
**Schema compliance**
|
||||
|
||||
- Use only task types and properties explicitly defined in the fetched schema. Never invent or guess types or property names.
|
||||
- Property keys must be unique within each task or block.
|
||||
|
||||
**Structural preservation**
|
||||
|
||||
- Always preserve root-level `id` and `namespace` if provided.
|
||||
- For modification requests, touch only the relevant part. Do not restructure or rewrite unrelated sections.
|
||||
- Avoid duplicating existing intent (e.g., replace a log message rather than adding a second one).
|
||||
|
||||
**Triggers**
|
||||
|
||||
- Include at least one trigger if execution should start based on an event or schedule.
|
||||
- Do NOT add a `Schedule` trigger unless a regular occurrence is explicitly requested.
|
||||
- Trigger outputs are accessed via `{{ trigger.outputName }}`; only use variables defined in the trigger's declared outputs.
|
||||
|
||||
**Looping**
|
||||
|
||||
- Use `ForEach` for repeated actions over a collection.
|
||||
- Use `LoopUntil` for condition-based looping.
|
||||
|
||||
**Flow outputs**
|
||||
|
||||
- Only include flow-level `outputs` if the user explicitly requests returning a value from the execution.
|
||||
|
||||
**State tracking between executions**
|
||||
|
||||
- For state-change detection, use KV tasks (`io.kestra.plugin.core.kv.Set` / `io.kestra.plugin.core.kv.Get`) to store and compare state across executions.
|
||||
|
||||
**JDBC plugin**
|
||||
|
||||
- Always set `fetchType: STORE` when using JDBC tasks.
|
||||
|
||||
**Date manipulation in Pebble**
|
||||
|
||||
- Use `dateAdd` and `date` filters for date arithmetic.
|
||||
- Apply `| number` before numeric comparisons.
|
||||
|
||||
**Credentials and secrets**
|
||||
|
||||
- Never embed secrets or hardcoded credentials.
|
||||
- Use flow `inputs` of type `SECRET` or Pebble expressions (e.g., `{{ secret('MY_SECRET') }}`).
|
||||
|
||||
**APIs and connectivity**
|
||||
|
||||
- Prefer public/unauthenticated APIs unless the user specifies otherwise.
|
||||
- Never assume a local port; use remote URLs.
|
||||
|
||||
**Quoting**
|
||||
|
||||
- Prefer double quotes; use single quotes inside double-quoted strings when needed.
|
||||
|
||||
**Error handling**
|
||||
|
||||
- If the request cannot be fulfilled using only schema-defined types and properties, output exactly:
|
||||
```
|
||||
I cannot generate a valid Kestra Flow YAML for this request based on the available schema.
|
||||
```
|
||||
|
||||
## Output format
|
||||
|
||||
- **Raw YAML only** — no prose, no markdown fences, no explanations outside the YAML.
|
||||
- Use `#` comments at the top of the output for any caveats, assumptions, or warnings.
|
||||
- The output must be ready to paste directly into the Kestra UI or deploy via `kestractl`.
|
||||
|
||||
## Example prompts
|
||||
|
||||
- "Write a Kestra flow that fetches a public API every hour and stores the result in KV store."
|
||||
- "Add a Slack notification task to this existing flow when any task fails."
|
||||
- "Generate a flow in namespace `prod.data` that reads from a Postgres table and writes the result to S3."
|
||||
- "Debug this flow YAML — it has a trigger variable reference that doesn't exist."
|
||||
@@ -1,113 +0,0 @@
|
||||
---
|
||||
name: kestra-ops
|
||||
description: Operate Kestra environments using kestractl for context setup, flow inspection, flow validation and deployment, execution monitoring, namespace operations, and namespace file management. Use when users request Kestra operational CLI tasks in dev, staging, or production.
|
||||
compatibility: Requires kestractl, network access to the Kestra API, and valid tenant/token credentials.
|
||||
---
|
||||
|
||||
# Kestra Operations Skill
|
||||
|
||||
Use this skill to perform day-to-day Kestra operations with `kestractl`.
|
||||
|
||||
## When to use
|
||||
|
||||
Use this skill when the request includes:
|
||||
|
||||
- Listing, inspecting, validating, or deploying flows
|
||||
- Triggering executions and checking execution status
|
||||
- Managing namespaces or namespace files (`nsfiles`)
|
||||
- Configuring or switching Kestra CLI contexts
|
||||
|
||||
## Required inputs
|
||||
|
||||
- Target environment or context (`dev`, `staging`, `prod`)
|
||||
- Host URL, tenant, and authentication method (usually token)
|
||||
- Namespace, flow ID, execution ID, and/or local file paths
|
||||
- Output preference (`table` for human-readable, `json` for automation)
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- `kestractl` is installed and executable
|
||||
- Access token and tenant are available
|
||||
- A valid context exists in `~/.kestractl/config.yaml` or values are provided via env vars/flags
|
||||
|
||||
## Configuration precedence
|
||||
|
||||
Resolve config from highest to lowest precedence:
|
||||
|
||||
1. Command flags (`--host`, `--tenant`, `--token`, `--output`)
|
||||
2. Environment variables (`KESTRACTL_HOST`, `KESTRACTL_TENANT`, `KESTRACTL_TOKEN`, `KESTRACTL_OUTPUT`)
|
||||
3. Config file (`~/.kestractl/config.yaml`)
|
||||
4. Built-in defaults
|
||||
|
||||
Common setup:
|
||||
|
||||
```bash
|
||||
kestractl config add dev http://localhost:8080 main --token DEV_TOKEN
|
||||
kestractl config add prod https://prod.kestra.io production --token PROD_TOKEN
|
||||
kestractl config use dev
|
||||
kestractl config show
|
||||
```
|
||||
|
||||
## Standard workflow
|
||||
|
||||
1. Resolve and confirm the target context.
|
||||
2. Run read-only discovery first.
|
||||
3. Validate artifacts before any deployment.
|
||||
4. Execute the requested operation with explicit flags.
|
||||
5. Verify outcomes (`--wait` for run operations where needed).
|
||||
6. Return a concise ops report with results and follow-up actions.
|
||||
|
||||
## Command patterns
|
||||
|
||||
Flows:
|
||||
|
||||
```bash
|
||||
kestractl flows list my.namespace
|
||||
kestractl flows get my.namespace my-flow
|
||||
kestractl flows validate ./flows/
|
||||
kestractl flows deploy ./flows/ --namespace prod.namespace --override --fail-fast
|
||||
```
|
||||
|
||||
Executions:
|
||||
|
||||
```bash
|
||||
kestractl executions run my.namespace my-flow --wait
|
||||
kestractl executions get 2TLGqHrXC9k8BczKJe5djX
|
||||
```
|
||||
|
||||
Namespaces:
|
||||
|
||||
```bash
|
||||
kestractl namespaces list
|
||||
kestractl namespaces list --query my.namespace
|
||||
```
|
||||
|
||||
Namespace files:
|
||||
|
||||
```bash
|
||||
kestractl nsfiles list my.namespace --path workflows/ --recursive
|
||||
kestractl nsfiles get my.namespace workflows/example.yaml --revision 3
|
||||
kestractl nsfiles upload my.namespace ./assets resources --override --fail-fast
|
||||
kestractl nsfiles delete my.namespace workflows --recursive
|
||||
```
|
||||
|
||||
## Guardrails
|
||||
|
||||
- Confirm production context before write operations (`deploy`, `upload`, `delete`).
|
||||
- Prefer `flows validate` before `flows deploy`.
|
||||
- Use `--output json` for scripting and automation reliability.
|
||||
- Avoid `--verbose` in shared logs because it can expose credentials.
|
||||
- For destructive `nsfiles` actions, confirm path scope and only use `--force` intentionally.
|
||||
|
||||
## Response format
|
||||
|
||||
- Context used (host, tenant, context name)
|
||||
- Commands executed (grouped by read vs write)
|
||||
- Results (success/failure and key IDs)
|
||||
- Risks, rollback notes, and follow-up actions
|
||||
|
||||
## Example prompts
|
||||
|
||||
- "Use `kestra-ops` to validate and deploy all flows in `./flows` to `prod.namespace` with fail-fast enabled, then report what changed."
|
||||
- "Use `kestra-ops` to run `my-flow` in `my.namespace`, wait for completion, and summarize execution status."
|
||||
- "Use `kestra-ops` to upload `./assets` to namespace files under `resources` with override enabled, then list uploaded files recursively."
|
||||
@@ -15,7 +15,7 @@ Knowledge management integration via Obsidian Local REST API for vault operation
|
||||
- **Vault path** configured in plugin settings
|
||||
- **API key** set (optional, if authentication enabled)
|
||||
|
||||
API endpoints available at `http://127.0.0.1:27124` by default.
|
||||
API endpoints available at `http://127.0.0.1:27123` by default.
|
||||
|
||||
## Core Workflows
|
||||
|
||||
@@ -24,7 +24,7 @@ API endpoints available at `http://127.0.0.1:27124` by default.
|
||||
Get list of all files in vault:
|
||||
|
||||
```bash
|
||||
curl -X GET "http://127.0.0.1:27124/list"
|
||||
curl -X GET "http://127.0.0.1:27123/list"
|
||||
```
|
||||
|
||||
Returns array of file objects with `path`, `mtime`, `ctime`, `size`.
|
||||
@@ -34,7 +34,7 @@ Returns array of file objects with `path`, `mtime`, `ctime`, `size`.
|
||||
Retrieve metadata for a specific file:
|
||||
|
||||
```bash
|
||||
curl -X GET "http://127.0.0.1:27124/get-file-info?path=Note%20Title.md"
|
||||
curl -X GET "http://127.0.0.1:27123/get-file-info?path=Note%20Title.md"
|
||||
```
|
||||
|
||||
Returns file metadata including tags, links, frontmatter.
|
||||
@@ -44,12 +44,13 @@ Returns file metadata including tags, links, frontmatter.
|
||||
Create a new note in the vault:
|
||||
|
||||
```bash
|
||||
curl -X POST "http://127.0.0.1:27124/create-note" \
|
||||
curl -X POST "http://127.0.0.1:27123/create-note" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"content": "# Note Title\n\nNote content..."}'
|
||||
```
|
||||
|
||||
Use `path` parameter for specific location:
|
||||
|
||||
```json
|
||||
{
|
||||
"content": "# Note Title\n\nNote content...",
|
||||
@@ -62,7 +63,7 @@ Use `path` parameter for specific location:
|
||||
Read note content by path:
|
||||
|
||||
```bash
|
||||
curl -X GET "http://127.0.0.1:27124/read-note?path=Note%20Title.md"
|
||||
curl -X GET "http://127.0.0.1:27123/read-note?path=Note%20Title.md"
|
||||
```
|
||||
|
||||
Returns note content as plain text or structured JSON with frontmatter parsing.
|
||||
@@ -72,7 +73,7 @@ Returns note content as plain text or structured JSON with frontmatter parsing.
|
||||
Modify existing note:
|
||||
|
||||
```bash
|
||||
curl -X PUT "http://127.0.0.1:27124/update-note" \
|
||||
curl -X PUT "http://127.0.0.1:27123/update-note" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"path": "Note Title.md", "content": "# Updated Title\n\nNew content..."}'
|
||||
```
|
||||
@@ -82,7 +83,7 @@ curl -X PUT "http://127.0.0.1:27124/update-note" \
|
||||
Remove note from vault:
|
||||
|
||||
```bash
|
||||
curl -X DELETE "http://127.0.0.1:27124/delete-note?path=Note%20Title.md"
|
||||
curl -X DELETE "http://127.0.0.1:27123/delete-note?path=Note%20Title.md"
|
||||
```
|
||||
|
||||
**Warning**: This operation is irreversible. Confirm with user before executing.
|
||||
@@ -93,10 +94,10 @@ Find notes by content, title, or tags:
|
||||
|
||||
```bash
|
||||
# Content search
|
||||
curl -X GET "http://127.0.0.1:27124/search?q=search%20term"
|
||||
curl -X GET "http://127.0.0.1:27123/search?q=search%20term"
|
||||
|
||||
# Search with parameters
|
||||
curl -X GET "http://127.0.0.1:27124/search?q=search%20term&path=subdirectory&context-length=100"
|
||||
curl -X GET "http://127.0.0.1:27123/search?q=search%20term&path=subdirectory&context-length=100"
|
||||
```
|
||||
|
||||
Returns array of matches with file path and context snippets.
|
||||
@@ -109,10 +110,10 @@ Retrieve or create daily note for specific date:
|
||||
|
||||
```bash
|
||||
# Today
|
||||
curl -X GET "http://127.0.0.1:27124/daily-note"
|
||||
curl -X GET "http://127.0.0.1:27123/daily-note"
|
||||
|
||||
# Specific date (YYYY-MM-DD)
|
||||
curl -X GET "http://127.0.0.1:27124/daily-note?date=2026-02-03"
|
||||
curl -X GET "http://127.0.0.1:27123/daily-note?date=2026-02-03"
|
||||
```
|
||||
|
||||
Returns daily note content or creates using Obsidian's Daily Notes template.
|
||||
@@ -122,7 +123,7 @@ Returns daily note content or creates using Obsidian's Daily Notes template.
|
||||
Modify today's daily note:
|
||||
|
||||
```bash
|
||||
curl -X PUT "http://127.0.0.1:27124/daily-note" \
|
||||
curl -X PUT "http://127.0.0.1:27123/daily-note" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"content": "## Journal\n\nToday I learned..."}'
|
||||
```
|
||||
@@ -132,7 +133,7 @@ curl -X PUT "http://127.0.0.1:27124/daily-note" \
|
||||
Retrieve vault metadata:
|
||||
|
||||
```bash
|
||||
curl -X GET "http://127.0.0.1:27124/vault-info"
|
||||
curl -X GET "http://127.0.0.1:27123/vault-info"
|
||||
```
|
||||
|
||||
Returns vault path, file count, and configuration details.
|
||||
@@ -156,6 +157,7 @@ status: active
|
||||
### WikiLinks
|
||||
|
||||
Reference other notes using Obsidian WikiLinks:
|
||||
|
||||
- `[[Note Title]]` - Link to note by title
|
||||
- `[[Note Title|Alias]]` - Link with custom display text
|
||||
- `[[Note Title#Heading]]` - Link to specific heading
|
||||
@@ -164,6 +166,7 @@ Reference other notes using Obsidian WikiLinks:
|
||||
### Tagging
|
||||
|
||||
Use tags for categorization:
|
||||
|
||||
- `#tag` - Single-word tag
|
||||
- `#nested/tag` - Hierarchical tags
|
||||
- Tags in frontmatter for metadata
|
||||
@@ -174,7 +177,7 @@ Use tags for categorization:
|
||||
### Create Brainstorm Note
|
||||
|
||||
```bash
|
||||
curl -X POST "http://127.0.0.1:27124/create-note" \
|
||||
curl -X POST "http://127.0.0.1:27123/create-note" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"path": "03-resources/brainstorms/2026-02-03-Topic.md",
|
||||
@@ -186,10 +189,10 @@ curl -X POST "http://127.0.0.1:27124/create-note" \
|
||||
|
||||
```bash
|
||||
# Get current daily note
|
||||
NOTE=$(curl -s "http://127.0.0.1:27124/daily-note")
|
||||
NOTE=$(curl -s "http://127.0.0.1:27123/daily-note")
|
||||
|
||||
# Append content
|
||||
curl -X PUT "http://127.0.0.1:27124/daily-note" \
|
||||
curl -X PUT "http://127.0.0.1:27123/daily-note" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"content\": \"${NOTE}\n\n## Journal Entry\n\nLearned about Obsidian API integration.\"}"
|
||||
```
|
||||
@@ -198,10 +201,10 @@ curl -X PUT "http://127.0.0.1:27124/daily-note" \
|
||||
|
||||
```bash
|
||||
# Search for related notes
|
||||
curl -s "http://127.0.0.1:27124/search?q=Obsidian"
|
||||
curl -s "http://127.0.0.1:27123/search?q=Obsidian"
|
||||
|
||||
# Create note with WikiLinks to found notes
|
||||
curl -X POST "http://127.0.0.1:27124/create-note" \
|
||||
curl -X POST "http://127.0.0.1:27123/create-note" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"path": "02-areas/Obsidian API Guide.md",
|
||||
@@ -211,15 +214,15 @@ curl -X POST "http://127.0.0.1:27124/create-note" \
|
||||
|
||||
## Integration with Other Skills
|
||||
|
||||
| From Obsidian | To skill | Handoff pattern |
|
||||
|--------------|----------|----------------|
|
||||
| Note created | brainstorming | Create brainstorm note with frontmatter |
|
||||
| Daily note updated | reflection | Append conversation analysis to journal |
|
||||
| Research note | research | Save research findings with tags |
|
||||
| Project note | task-management | Link tasks to project notes |
|
||||
| Plan document | plan-writing | Save generated plan to vault |
|
||||
| Vault search | qmd | Search vault content via qmd hybrid search |
|
||||
| Memory note | qmd | Create/read memory notes in 80-memory/ |
|
||||
| From Obsidian | To skill | Handoff pattern |
|
||||
| ------------------ | --------------- | ------------------------------------------ |
|
||||
| Note created | brainstorming | Create brainstorm note with frontmatter |
|
||||
| Daily note updated | reflection | Append conversation analysis to journal |
|
||||
| Research note | research | Save research findings with tags |
|
||||
| Project note | task-management | Link tasks to project notes |
|
||||
| Plan document | plan-writing | Save generated plan to vault |
|
||||
| Vault search | qmd | Search vault content via qmd hybrid search |
|
||||
| Memory note | qmd | Create/read memory notes in 80-memory/ |
|
||||
|
||||
## Best Practices
|
||||
|
||||
@@ -248,6 +251,7 @@ See the qmd skill for memory workflows, session summaries, and auto-recall patte
|
||||
## Error Handling
|
||||
|
||||
Common HTTP status codes:
|
||||
|
||||
- `200 OK` - Success
|
||||
- `404 Not Found` - File or resource doesn't exist
|
||||
- `400 Bad Request` - Invalid parameters or malformed JSON
|
||||
|
||||
Reference in New Issue
Block a user