{"id":50603030,"url":"https://github.com/probelabs/probe-quickstart","last_synced_at":"2026-06-05T20:01:28.455Z","repository":{"id":337297482,"uuid":"1153015247","full_name":"probelabs/probe-quickstart","owner":"probelabs","description":"Quickstart template for building AI assistants with Probe — define skills, tools, and knowledge in YAML","archived":false,"fork":false,"pushed_at":"2026-03-03T14:21:14.000Z","size":84,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-03T18:39:21.979Z","etag":null,"topics":["ai-assistant","llm","mcp","probe","quickstart","slack-bot","yaml"],"latest_commit_sha":null,"homepage":"https://probelabs.com","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/probelabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-08T19:17:03.000Z","updated_at":"2026-03-03T14:21:18.000Z","dependencies_parsed_at":"2026-02-09T01:05:20.557Z","dependency_job_id":null,"html_url":"https://github.com/probelabs/probe-quickstart","commit_stats":null,"previous_names":["probelabs/visor-quickstart","probelabs/probe-quickstart"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/probelabs/probe-quickstart","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/probelabs%2Fprobe-quickstart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/probelabs%2Fprobe-quickstart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/probelabs%2Fprobe-quickstart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/probelabs%2Fprobe-quickstart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/probelabs","download_url":"https://codeload.github.com/probelabs/probe-quickstart/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/probelabs%2Fprobe-quickstart/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33957499,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-05T02:00:06.157Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-assistant","llm","mcp","probe","quickstart","slack-bot","yaml"],"created_at":"2026-06-05T20:01:27.482Z","updated_at":"2026-06-05T20:01:28.450Z","avatar_url":"https://github.com/probelabs.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Probe Quickstart\n\nHalf your team's time goes to finding things that already exist — in code, in tickets, in docs. Engineers context-switch between GitHub, Jira, Slack, and Confluence just to answer \"where is this implemented?\" or \"what's the status of that feature?\"\n\n**Probe** fixes this. It's an AI agent that connects to your codebase, tickets, docs, and tools — then answers questions, explores code, makes changes, and automates workflows. You define everything in YAML. No custom code, no vendor lock-in, any LLM provider.\n\nThis quickstart gives you a working assistant in under a minute. Here's a simplified version of the config (full version in assistant.yaml):\n\n```yaml\nversion: \"1.0\"\n\n# Import the assistant engine (intent classification, skill activation, tools)\nimports:\n  - visor://assistant.yaml\n\n# Slack config (remove if CLI-only)\nslack:\n  version: \"v1\"\n  mentions: all\n  threads: required\n\nchecks:\n  chat:\n    type: workflow\n    workflow: assistant\n    assume: [\"true\"]\n    args:\n      question: \"{{ conversation.current.text }}\"\n\n      system_prompt: |\n        You are a Probe Labs assistant helping developers understand and build\n        AI assistants with Probe. You can explore code, explain how assistants work,\n        and demonstrate how skills, intents, and tools work together.\n\n      # Intents — broad request categories for routing\n      intents:\n        - id: chat\n          description: General Q\u0026A, follow-up questions, small talk\n        - id: code_help\n          description: Questions about code, implementation, or architecture\n        - id: task\n          description: Create, update, or execute something\n\n      # Skills — capabilities that activate based on what the user asks\n      skills:\n        # Inline knowledge (no tools)\n        - id: capabilities\n          description: user asks what this assistant can do\n          knowledge: |\n            I can explain Probe, explore code across repos, and make changes via PRs.\n\n        # Knowledge loaded from file via {% readfile %}\n        - id: probe-guide\n          description: questions about how Probe works, skills, intents, tools, or YAML config\n          knowledge: |\n            {% readfile \"docs/probe-overview.md\" %}\n\n        # Workflow tool — code search across repos\n        - id: code-explorer\n          description: needs codebase exploration, code search, or implementation details\n          tools:\n            code-explorer:\n              workflow: code-talk\n              inputs:\n                projects:\n                  - name: quickstart\n                    path: .\n                  - name: probe\n                    repo: probelabs/visor\n          allowed_commands: ['git:log:*', 'git:show:*', 'git:diff:*']\n\n        # Skill with dependency — auto-activates code-explorer\n        - id: engineer\n          description: user wants code changes, a PR, or a feature implemented\n          requires: [code-explorer]\n          tools:\n            engineer:\n              workflow: engineer\n              inputs: {}\n          allowed_commands: ['git:*', 'npm:*']\n          disallowed_commands: ['git:push:--force', 'git:reset:--hard']\n\n        # MCP tool (uncomment + set JIRA_* in .env)\n        # - id: jira\n        #   description: user mentions Jira or ticket IDs like PROJ-123\n        #   tools:\n        #     jira:\n        #       command: uvx\n        #       args: [\"mcp-atlassian\"]\n        #       env:\n        #         JIRA_URL: \"${JIRA_URL}\"\n        #         JIRA_API_TOKEN: \"${JIRA_API_TOKEN}\"\n        #       allowedMethods: [jira_get_issue, jira_search, jira_create_issue]\n```\n\nThat's it. One file. Skills, tools, knowledge, and routing — all declared in YAML.\n\n## Quick Start\n\n**Prerequisites:** [Node.js](https://nodejs.org/) \u003e= 18\n\n```bash\ngit clone https://github.com/probelabs/visor-quickstart.git\ncd visor-quickstart\ncp .env.example .env\n# Edit .env — uncomment and set ANTHROPIC_API_KEY (or another provider)\n```\n\nLaunch the interactive TUI (recommended):\n```bash\nnpx -y @probelabs/visor@latest run assistant.yaml --tui\n```\n\nThe TUI gives you a full chat interface with real-time visibility into what the assistant is doing. Press **Shift+Tab** to cycle through three views:\n\n- **Chat** — the conversation with your assistant\n- **Logs** — runtime logs showing intent classification, skill activation, and tool calls\n- **Trace** — detailed execution trace for debugging pipelines and workflows\n\nOr send a single message from the command line with `--message`:\n```bash\nnpx -y @probelabs/visor@latest run assistant.yaml --message \"What can you do?\"\n```\n\n## What Just Happened?\n\nWhen you sent a message, Probe ran this pipeline:\n\n1. **Intent classification** — determined the request type (`chat`, `code_help`, or `task`)\n2. **Skill selection** — matched relevant skills based on their `description` fields\n3. **Dependency expansion** — skills with `requires` pulled in other skills automatically\n4. **Knowledge + tool injection** — activated skills' knowledge and tools were added to the AI's context\n5. **Response** — the AI answered using the assembled context, calling tools if needed\n\nEverything above is defined in `assistant.yaml`. Open it and read along.\n\n## Try These\n\nEach message activates a different skill. Try them in the TUI (`--tui`) or pass them with `--message`:\n\n```bash\n# capabilities — inline knowledge, no tools\nnpx -y @probelabs/visor@latest run assistant.yaml --message \"What can you help me with?\"\n\n# probe-guide — knowledge loaded from docs/probe-overview.md\nnpx -y @probelabs/visor@latest run assistant.yaml --message \"How do skills work in Probe?\"\n\n# code-explorer — searches code across repos\nnpx -y @probelabs/visor@latest run assistant.yaml --message \"Show me what's in assistant.yaml\"\n\n# engineer — requires code-explorer, so both activate\nnpx -y @probelabs/visor@latest run assistant.yaml --message \"Add a comment to the top of README.md\"\n```\n\nThe `--message` flag is useful for scripting, CI pipelines, or quick one-off questions. For interactive exploration, use `--tui` instead.\n\n## Customize It\n\n**Change the identity** — edit `system_prompt` in `assistant.yaml`:\n```yaml\nsystem_prompt: |\n  You are an assistant for Acme Corp's engineering team.\n```\n\n**Add your repos** — add entries to the `code-explorer` skill's `projects`:\n```yaml\nprojects:\n  - name: backend\n    path: /path/to/backend\n    description: Backend API server\n  - name: frontend\n    repo: myorg/frontend\n    ref: main\n    description: React frontend\n```\n\n**Add a knowledge skill** — load docs from a file:\n```yaml\n- id: onboarding\n  description: questions about onboarding, setup, or getting started\n  knowledge: |\n    {% readfile \"docs/onboarding-guide.md\" %}\n```\n\n**Control bash commands per skill** — restrict what each skill can run:\n```yaml\n- id: devops\n  description: user needs container management or deployment help\n  allowed_commands: ['docker:*', 'kubectl:get:*']\n  disallowed_commands: ['docker:rm:--force', 'docker:system:prune', 'kubectl:delete:*']\n```\n\n**Add an MCP tool** — uncomment the `jira` skill in `assistant.yaml` and set credentials in `.env`.\n\n## Connect to Slack\n\nTurn this assistant into a Slack bot your whole team can talk to.\n\n**1. Create a Slack app** at [api.slack.com/apps](https://api.slack.com/apps):\n- Enable **Socket Mode** (Settings → Socket Mode → Enable)\n- Under **OAuth \u0026 Permissions**, add these Bot Token Scopes:\n  `app_mentions:read`, `channels:history`, `groups:history`, `im:history`, `mpim:history`, `chat:write`, `reactions:read`, `reactions:write`, `im:read`, `im:write`\n- Under **Event Subscriptions**, subscribe to bot events:\n  `app_mention`, `message.channels`, `message.groups`, `message.im`, `message.mpim`\n- Install the app to your workspace\n\n**2. Grab two tokens** and add them to `.env`:\n```bash\n# Bot token (OAuth \u0026 Permissions → Bot User OAuth Token)\nSLACK_BOT_TOKEN=xoxb-your-bot-token\n\n# App token (Basic Information → App-Level Tokens → create one with connections:write scope)\nSLACK_APP_TOKEN=xapp-your-app-token\n```\n\n**3. Run it:**\n```bash\nnpx -y @probelabs/visor@latest run assistant.yaml --slack\n```\n\nMention your bot in any Slack thread and it will respond. The `slack` section in `assistant.yaml` controls behavior — `threads: required` means it only responds in threads, not top-level channel messages.\n\nFor a full walkthrough, see the [Build a Slack Bot](https://probelabs.com/docs/guides/slack-bot) guide.\n\n## Test \u0026 Lint\n\n**Run tests** to verify that intent classification routes to the correct skills:\n\n```bash\nnpx -y @probelabs/visor@latest test assistant.yaml\n```\n\nEach test case in the `tests` section of `assistant.yaml` sends a mock message and asserts which intents and skills activate. Use this to catch routing regressions when you add or edit skills.\n\n**Lint your configuration** to catch YAML syntax errors, missing fields, and invalid references before running:\n\n```bash\nnpx -y @probelabs/visor@latest lint assistant.yaml\n```\n\nLint checks for common issues like misspelled skill IDs in `requires`, missing `description` fields, and invalid workflow references. Run it after every config change — it's instant and saves debugging time.\n\n## Examples\n\n| File | What it shows |\n|------|---------------|\n| `assistant.yaml` | Full-featured assistant (start here) |\n| `examples/minimal.yaml` | Simplest possible assistant (~25 lines) |\n| `examples/with-jira.yaml` | External MCP tool integration |\n| `examples/multi-repo.yaml` | Code exploration across multiple repos |\n\n## Troubleshooting\n\n### \"No AI provider configured\"\nYour API key isn't set. Check `.env` has an uncommented key:\n```bash\ngrep API_KEY .env\n```\n\n### \"Unable to fetch workflow\" or network errors\nThe built-in `visor://` workflows are bundled with visor and resolve locally — no network needed.\nIf you prefer a local copy:\n```bash\ncp node_modules/visor/workflows/assistant.yaml workflows/assistant.yaml\n```\nThen change imports to: `imports: [\"./workflows/assistant.yaml\"]`\n\n### \"conversation.current.text is undefined\"\nYou forgot `--message` in CLI mode:\n```bash\nnpx -y @probelabs/visor@latest run assistant.yaml --message \"Hello\"\n```\n\n### Skill doesn't activate\nMake the skill's `description` more specific about when it should trigger:\n```yaml\n# Too vague:\ndescription: ticket stuff\n\n# Better:\ndescription: user mentions Jira, ticket IDs like PROJ-123, or needs ticket information\n```\n\n### Slack bot not responding\n1. Check both tokens in `.env`: `SLACK_BOT_TOKEN` and `SLACK_APP_TOKEN`\n2. Make sure you're mentioning the bot in a thread (not a channel message)\n3. Run with: `npx -y @probelabs/visor@latest run assistant.yaml --slack`\n\n## Real-World Example\n\nThe **ProbeLabs assistant** — the AI bot that powers the ProbeLabs engineering team's Slack — is itself an open-source project built on this same quickstart pattern. It has 7 skills covering code exploration, GitHub access, CI/CD debugging, and automated PR creation across 15 repositories.\n\nBrowse the source to see how a production assistant is structured: **[probelabs/probelabs-assistant](https://github.com/probelabs/probelabs-assistant)**\n\nIt's a great reference for:\n- Organizing skills and knowledge files across `config/` and `docs/` directories\n- Wiring up workflow tools like `code-talk` and `engineer`\n- Connecting MCP tools and skill dependencies (`requires`)\n- Writing a system prompt for a team-specific assistant\n\n## Next Steps\n\n- [Probe Labs](https://probelabs.com) — the platform\n- [Probe engine](https://github.com/probelabs/visor) — runtime and CLI reference\n- [Assistant workflows](https://github.com/probelabs/visor) — the workflow engine this quickstart imports (bundled in visor)\n- Questions? Open an issue or contact hello@probelabs.com\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprobelabs%2Fprobe-quickstart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprobelabs%2Fprobe-quickstart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprobelabs%2Fprobe-quickstart/lists"}