Repository files navigation

Crow CLI

Crow CLI is a standalone command-line companion for Crow developer handoffs. It reads queued Crow events, listens for live forwarded events, and fetches implementation-plan handoffs in formats that are ready to paste into an AI coding agent or use directly in a terminal workflow.

The app is built with Laravel Zero and ships as a PHAR-backed crow executable.

Installation

Once the package is published, install it globally with Composer:

composer global require crowbot/cli

Make sure Composer's global bin directory is on your PATH, then verify the install:

crow list

For local development from this repository:

composer install
php crow list

The checked-in PHAR build is available at:

./builds/crow list

Authentication

Run the login command:

crow auth login

The CLI prints the API-token page URL, attempts to open it in your browser, then prompts for the token. If your terminal supports clickable links, you can also open the printed URL directly.

Credentials are stored at:

<project>/.crow/config.json

When you run crow auth login from inside a project, the CLI writes credentials to that project's .crow/config.json. This lets different projects use different Crow accounts and API tokens. If no project root can be detected, credentials fall back to the global config at ~/.crow/config.json.

Use --global when you intentionally want shared credentials:

crow auth login --global

Config files are written with restrictive permissions where the platform supports it. Environment variables remain supported for automation and CI.

Configuration precedence is:

  1. Explicit command options, such as --api-token or --api-url
  2. Environment variables
  3. The nearest project config discovered by walking upward from the current directory: .crow/config.json
  4. Global config: ~/.crow/config.json
  5. Built-in defaults

Supported environment variables:

CROW_API_URL=https://crow.test/api/v1
CROW_API_TOKEN=your_token_here
CROW_APP_ID=
CROW_LISTEN_PUBLIC_URL=
CROW_LISTEN_HOST=127.0.0.1
CROW_LISTEN_PORT=8787
CROW_LISTEN_SECRET=

The current default API URL is https://crow.test/api/v1.

For automation or headless environments, pass the token and skip browser launch:

crow auth login --api-token=your_token_here --no-browser

To point one command at a specific config file, set CROW_CONFIG_PATH:

CROW_CONFIG_PATH=/path/to/.crow/config.json crow plan

Commands

Fetch Implementation Plans

List active implementation plans:

crow plan

Fetch a specific plan handoff:

crow plan <plan-id>

Print raw JSON:

crow plan <plan-id> --json

Write output to a file:

crow plan <plan-id> --output=handoff.md

Read Crow Events

Read the latest unread event:

crow read

Read a specific event:

crow read<event-id>

Leave the event unread after printing:

crow read<event-id> --leave-unread

Filter unread lookup by app or event types:

crow read --app-id=123 --events=dispatch.received --events=recon.ready

Listen For Live Events

Start a local listener:

crow listen --public-url=https://your-public-url.example

The listener binds to 127.0.0.1:8787 by default and receives events at:

POST /crow/events
GET /health

Override the bind address:

crow listen --host=127.0.0.1 --port=8787

Start the listener without registering it with Crow:

crow listen --no-register

When registering with Crow, expose the local listener first and set CROW_LISTEN_PUBLIC_URL or pass --public-url.

Compatibility Aliases

The old Artisan-style command names are still available as aliases:

crow crow:plan
crow crow:read
crow crow:listen

The preferred CLI interface is:

crow plan
crow read
crow listen

Development

Install dependencies:

composer install

Run the test suite:

composer test

Inspect available commands:

php crow list

Build the PHAR:

php crow app:build crow --build-version=unreleased

Smoke-test the built artifact:

./builds/crow plan --help

Release Notes

This repository is now the standalone Crow CLI. It is no longer a Laravel installable package that auto-registers Artisan commands inside a host application.

For Packagist distribution, composer.json points its bin entry at builds/crow, so release builds should include a fresh PHAR artifact.

About

Command line interface for crowbot

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Crow CLI

Crow CLI is a standalone command-line companion for Crow developer handoffs. It reads queued Crow events, listens for live forwarded events, and fetches implementation-plan handoffs in formats that are ready to paste into an AI coding agent or use directly in a terminal workflow.

The app is built with Laravel Zero and ships as a PHAR-backed crow executable.

Installation

Once the package is published, install it globally with Composer:

composer global require crowbot/cli

Make sure Composer's global bin directory is on your PATH, then verify the install:

crow list

For local development from this repository:

composer install
php crow list

The checked-in PHAR build is available at:

./builds/crow list

Authentication

Run the login command:

crow auth login

The CLI prints the API-token page URL, attempts to open it in your browser, then prompts for the token. If your terminal supports clickable links, you can also open the printed URL directly.

Credentials are stored at:

<project>/.crow/config.json

When you run crow auth login from inside a project, the CLI writes credentials to that project's .crow/config.json. This lets different projects use different Crow accounts and API tokens. If no project root can be detected, credentials fall back to the global config at ~/.crow/config.json.

Use --global when you intentionally want shared credentials:

crow auth login --global

Config files are written with restrictive permissions where the platform supports it. Environment variables remain supported for automation and CI.

Configuration precedence is:

  1. Explicit command options, such as --api-token or --api-url
  2. Environment variables
  3. The nearest project config discovered by walking upward from the current directory: .crow/config.json
  4. Global config: ~/.crow/config.json
  5. Built-in defaults

Supported environment variables:

CROW_API_URL=https://crow.test/api/v1
CROW_API_TOKEN=your_token_here
CROW_APP_ID=
CROW_LISTEN_PUBLIC_URL=
CROW_LISTEN_HOST=127.0.0.1
CROW_LISTEN_PORT=8787
CROW_LISTEN_SECRET=

The current default API URL is https://crow.test/api/v1.

For automation or headless environments, pass the token and skip browser launch:

crow auth login --api-token=your_token_here --no-browser

To point one command at a specific config file, set CROW_CONFIG_PATH:

CROW_CONFIG_PATH=/path/to/.crow/config.json crow plan

Commands

Fetch Implementation Plans

List active implementation plans:

crow plan

Fetch a specific plan handoff:

crow plan <plan-id>

Print raw JSON:

crow plan <plan-id> --json

Write output to a file:

crow plan <plan-id> --output=handoff.md

Read Crow Events

Read the latest unread event:

crow read

Read a specific event:

crow read<event-id>

Leave the event unread after printing:

crow read<event-id> --leave-unread

Filter unread lookup by app or event types:

crow read --app-id=123 --events=dispatch.received --events=recon.ready

Listen For Live Events

Start a local listener:

crow listen --public-url=https://your-public-url.example

The listener binds to 127.0.0.1:8787 by default and receives events at:

POST /crow/events
GET /health

Override the bind address:

crow listen --host=127.0.0.1 --port=8787

Start the listener without registering it with Crow:

crow listen --no-register

When registering with Crow, expose the local listener first and set CROW_LISTEN_PUBLIC_URL or pass --public-url.

Compatibility Aliases

The old Artisan-style command names are still available as aliases:

crow crow:plan
crow crow:read
crow crow:listen

The preferred CLI interface is:

crow plan
crow read
crow listen

Development

Install dependencies:

composer install

Run the test suite:

composer test

Inspect available commands:

php crow list

Build the PHAR:

php crow app:build crow --build-version=unreleased

Smoke-test the built artifact:

./builds/crow plan --help

Release Notes

This repository is now the standalone Crow CLI. It is no longer a Laravel installable package that auto-registers Artisan commands inside a host application.

For Packagist distribution, composer.json points its bin entry at builds/crow, so release builds should include a fresh PHAR artifact.

About

Command line interface for crowbot

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Crow CLI

Crow CLI is a standalone command-line companion for Crow developer handoffs. It reads queued Crow events, listens for live forwarded events, and fetches implementation-plan handoffs in formats that are ready to paste into an AI coding agent or use directly in a terminal workflow.

The app is built with Laravel Zero and ships as a PHAR-backed crow executable.

Installation

Once the package is published, install it globally with Composer:

composer global require crowbot/cli

Make sure Composer's global bin directory is on your PATH, then verify the install:

crow list

For local development from this repository:

composer install
php crow list

The checked-in PHAR build is available at:

./builds/crow list

Authentication

Run the login command:

crow auth login

The CLI prints the API-token page URL, attempts to open it in your browser, then prompts for the token. If your terminal supports clickable links, you can also open the printed URL directly.

Credentials are stored at:

<project>/.crow/config.json

When you run crow auth login from inside a project, the CLI writes credentials to that project's .crow/config.json. This lets different projects use different Crow accounts and API tokens. If no project root can be detected, credentials fall back to the global config at ~/.crow/config.json.

Use --global when you intentionally want shared credentials:

crow auth login --global

Config files are written with restrictive permissions where the platform supports it. Environment variables remain supported for automation and CI.

Configuration precedence is:

  1. Explicit command options, such as --api-token or --api-url
  2. Environment variables
  3. The nearest project config discovered by walking upward from the current directory: .crow/config.json
  4. Global config: ~/.crow/config.json
  5. Built-in defaults

Supported environment variables:

CROW_API_URL=https://crow.test/api/v1
CROW_API_TOKEN=your_token_here
CROW_APP_ID=
CROW_LISTEN_PUBLIC_URL=
CROW_LISTEN_HOST=127.0.0.1
CROW_LISTEN_PORT=8787
CROW_LISTEN_SECRET=

The current default API URL is https://crow.test/api/v1.

For automation or headless environments, pass the token and skip browser launch:

crow auth login --api-token=your_token_here --no-browser

To point one command at a specific config file, set CROW_CONFIG_PATH:

CROW_CONFIG_PATH=/path/to/.crow/config.json crow plan

Commands

Fetch Implementation Plans

List active implementation plans:

crow plan

Fetch a specific plan handoff:

crow plan <plan-id>

Print raw JSON:

crow plan <plan-id> --json

Write output to a file:

crow plan <plan-id> --output=handoff.md

Read Crow Events

Read the latest unread event:

crow read

Read a specific event:

crow read<event-id>

Leave the event unread after printing:

crow read<event-id> --leave-unread

Filter unread lookup by app or event types:

crow read --app-id=123 --events=dispatch.received --events=recon.ready

Listen For Live Events

Start a local listener:

crow listen --public-url=https://your-public-url.example

The listener binds to 127.0.0.1:8787 by default and receives events at:

POST /crow/events
GET /health

Override the bind address:

crow listen --host=127.0.0.1 --port=8787

Start the listener without registering it with Crow:

crow listen --no-register

When registering with Crow, expose the local listener first and set CROW_LISTEN_PUBLIC_URL or pass --public-url.

Compatibility Aliases

The old Artisan-style command names are still available as aliases:

crow crow:plan
crow crow:read
crow crow:listen

The preferred CLI interface is:

crow plan
crow read
crow listen

Development

Install dependencies:

composer install

Run the test suite:

composer test

Inspect available commands:

php crow list

Build the PHAR:

php crow app:build crow --build-version=unreleased

Smoke-test the built artifact:

./builds/crow plan --help

Release Notes

This repository is now the standalone Crow CLI. It is no longer a Laravel installable package that auto-registers Artisan commands inside a host application.

For Packagist distribution, composer.json points its bin entry at builds/crow, so release builds should include a fresh PHAR artifact.

About

Command line interface for crowbot

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Crow CLI

Crow CLI is a standalone command-line companion for Crow developer handoffs. It reads queued Crow events, listens for live forwarded events, and fetches implementation-plan handoffs in formats that are ready to paste into an AI coding agent or use directly in a terminal workflow.

The app is built with Laravel Zero and ships as a PHAR-backed crow executable.

Installation

Once the package is published, install it globally with Composer:

composer global require crowbot/cli

Make sure Composer's global bin directory is on your PATH, then verify the install:

crow list

For local development from this repository:

composer install
php crow list

The checked-in PHAR build is available at:

./builds/crow list

Authentication

Run the login command:

crow auth login

The CLI prints the API-token page URL, attempts to open it in your browser, then prompts for the token. If your terminal supports clickable links, you can also open the printed URL directly.

Credentials are stored at:

<project>/.crow/config.json

When you run crow auth login from inside a project, the CLI writes credentials to that project's .crow/config.json. This lets different projects use different Crow accounts and API tokens. If no project root can be detected, credentials fall back to the global config at ~/.crow/config.json.

Use --global when you intentionally want shared credentials:

crow auth login --global

Config files are written with restrictive permissions where the platform supports it. Environment variables remain supported for automation and CI.

Configuration precedence is:

  1. Explicit command options, such as --api-token or --api-url
  2. Environment variables
  3. The nearest project config discovered by walking upward from the current directory: .crow/config.json
  4. Global config: ~/.crow/config.json
  5. Built-in defaults

Supported environment variables:

CROW_API_URL=https://crow.test/api/v1
CROW_API_TOKEN=your_token_here
CROW_APP_ID=
CROW_LISTEN_PUBLIC_URL=
CROW_LISTEN_HOST=127.0.0.1
CROW_LISTEN_PORT=8787
CROW_LISTEN_SECRET=

The current default API URL is https://crow.test/api/v1.

For automation or headless environments, pass the token and skip browser launch:

crow auth login --api-token=your_token_here --no-browser

To point one command at a specific config file, set CROW_CONFIG_PATH:

CROW_CONFIG_PATH=/path/to/.crow/config.json crow plan

Commands

Fetch Implementation Plans

List active implementation plans:

crow plan

Fetch a specific plan handoff:

crow plan <plan-id>

Print raw JSON:

crow plan <plan-id> --json

Write output to a file:

crow plan <plan-id> --output=handoff.md

Read Crow Events

Read the latest unread event:

crow read

Read a specific event:

crow read<event-id>

Leave the event unread after printing:

crow read<event-id> --leave-unread

Filter unread lookup by app or event types:

crow read --app-id=123 --events=dispatch.received --events=recon.ready

Listen For Live Events

Start a local listener:

crow listen --public-url=https://your-public-url.example

The listener binds to 127.0.0.1:8787 by default and receives events at:

POST /crow/events
GET /health

Override the bind address:

crow listen --host=127.0.0.1 --port=8787

Start the listener without registering it with Crow:

crow listen --no-register

When registering with Crow, expose the local listener first and set CROW_LISTEN_PUBLIC_URL or pass --public-url.

Compatibility Aliases

The old Artisan-style command names are still available as aliases:

crow crow:plan
crow crow:read
crow crow:listen

The preferred CLI interface is:

crow plan
crow read
crow listen

Development

Install dependencies:

composer install

Run the test suite:

composer test

Inspect available commands:

php crow list

Build the PHAR:

php crow app:build crow --build-version=unreleased

Smoke-test the built artifact:

./builds/crow plan --help

Release Notes

This repository is now the standalone Crow CLI. It is no longer a Laravel installable package that auto-registers Artisan commands inside a host application.

For Packagist distribution, composer.json points its bin entry at builds/crow, so release builds should include a fresh PHAR artifact.

About

Command line interface for crowbot

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Crow CLI

Crow CLI is a standalone command-line companion for Crow developer handoffs. It reads queued Crow events, listens for live forwarded events, and fetches implementation-plan handoffs in formats that are ready to paste into an AI coding agent or use directly in a terminal workflow.

The app is built with Laravel Zero and ships as a PHAR-backed crow executable.

Installation

Once the package is published, install it globally with Composer:

composer global require crowbot/cli

Make sure Composer's global bin directory is on your PATH, then verify the install:

crow list

For local development from this repository:

composer install
php crow list

The checked-in PHAR build is available at:

./builds/crow list

Authentication

Run the login command:

crow auth login

The CLI prints the API-token page URL, attempts to open it in your browser, then prompts for the token. If your terminal supports clickable links, you can also open the printed URL directly.

Credentials are stored at:

<project>/.crow/config.json

When you run crow auth login from inside a project, the CLI writes credentials to that project's .crow/config.json. This lets different projects use different Crow accounts and API tokens. If no project root can be detected, credentials fall back to the global config at ~/.crow/config.json.

Use --global when you intentionally want shared credentials:

crow auth login --global

Config files are written with restrictive permissions where the platform supports it. Environment variables remain supported for automation and CI.

Configuration precedence is:

  1. Explicit command options, such as --api-token or --api-url
  2. Environment variables
  3. The nearest project config discovered by walking upward from the current directory: .crow/config.json
  4. Global config: ~/.crow/config.json
  5. Built-in defaults

Supported environment variables:

CROW_API_URL=https://crow.test/api/v1
CROW_API_TOKEN=your_token_here
CROW_APP_ID=
CROW_LISTEN_PUBLIC_URL=
CROW_LISTEN_HOST=127.0.0.1
CROW_LISTEN_PORT=8787
CROW_LISTEN_SECRET=

The current default API URL is https://crow.test/api/v1.

For automation or headless environments, pass the token and skip browser launch:

crow auth login --api-token=your_token_here --no-browser

To point one command at a specific config file, set CROW_CONFIG_PATH:

CROW_CONFIG_PATH=/path/to/.crow/config.json crow plan

Commands

Fetch Implementation Plans

List active implementation plans:

crow plan

Fetch a specific plan handoff:

crow plan <plan-id>

Print raw JSON:

crow plan <plan-id> --json

Write output to a file:

crow plan <plan-id> --output=handoff.md

Read Crow Events

Read the latest unread event:

crow read

Read a specific event:

crow read<event-id>

Leave the event unread after printing:

crow read<event-id> --leave-unread

Filter unread lookup by app or event types:

crow read --app-id=123 --events=dispatch.received --events=recon.ready

Listen For Live Events

Start a local listener:

crow listen --public-url=https://your-public-url.example

The listener binds to 127.0.0.1:8787 by default and receives events at:

POST /crow/events
GET /health

Override the bind address:

crow listen --host=127.0.0.1 --port=8787

Start the listener without registering it with Crow:

crow listen --no-register

When registering with Crow, expose the local listener first and set CROW_LISTEN_PUBLIC_URL or pass --public-url.

Compatibility Aliases

The old Artisan-style command names are still available as aliases:

crow crow:plan
crow crow:read
crow crow:listen

The preferred CLI interface is:

crow plan
crow read
crow listen

Development

Install dependencies:

composer install

Run the test suite:

composer test

Inspect available commands:

php crow list

Build the PHAR:

php crow app:build crow --build-version=unreleased

Smoke-test the built artifact:

./builds/crow plan --help

Release Notes

This repository is now the standalone Crow CLI. It is no longer a Laravel installable package that auto-registers Artisan commands inside a host application.

For Packagist distribution, composer.json points its bin entry at builds/crow, so release builds should include a fresh PHAR artifact.

About

Command line interface for crowbot

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Crow CLI

Crow CLI is a standalone command-line companion for Crow developer handoffs. It reads queued Crow events, listens for live forwarded events, and fetches implementation-plan handoffs in formats that are ready to paste into an AI coding agent or use directly in a terminal workflow.

The app is built with Laravel Zero and ships as a PHAR-backed crow executable.

Installation

Once the package is published, install it globally with Composer:

composer global require crowbot/cli

Make sure Composer's global bin directory is on your PATH, then verify the install:

crow list

For local development from this repository:

composer install
php crow list

The checked-in PHAR build is available at:

./builds/crow list

Authentication

Run the login command:

crow auth login

The CLI prints the API-token page URL, attempts to open it in your browser, then prompts for the token. If your terminal supports clickable links, you can also open the printed URL directly.

Credentials are stored at:

<project>/.crow/config.json

When you run crow auth login from inside a project, the CLI writes credentials to that project's .crow/config.json. This lets different projects use different Crow accounts and API tokens. If no project root can be detected, credentials fall back to the global config at ~/.crow/config.json.

Use --global when you intentionally want shared credentials:

crow auth login --global

Config files are written with restrictive permissions where the platform supports it. Environment variables remain supported for automation and CI.

Configuration precedence is:

  1. Explicit command options, such as --api-token or --api-url
  2. Environment variables
  3. The nearest project config discovered by walking upward from the current directory: .crow/config.json
  4. Global config: ~/.crow/config.json
  5. Built-in defaults

Supported environment variables:

CROW_API_URL=https://crow.test/api/v1
CROW_API_TOKEN=your_token_here
CROW_APP_ID=
CROW_LISTEN_PUBLIC_URL=
CROW_LISTEN_HOST=127.0.0.1
CROW_LISTEN_PORT=8787
CROW_LISTEN_SECRET=

The current default API URL is https://crow.test/api/v1.

For automation or headless environments, pass the token and skip browser launch:

crow auth login --api-token=your_token_here --no-browser

To point one command at a specific config file, set CROW_CONFIG_PATH:

CROW_CONFIG_PATH=/path/to/.crow/config.json crow plan

Commands

Fetch Implementation Plans

List active implementation plans:

crow plan

Fetch a specific plan handoff:

crow plan <plan-id>

Print raw JSON:

crow plan <plan-id> --json

Write output to a file:

crow plan <plan-id> --output=handoff.md

Read Crow Events

Read the latest unread event:

crow read

Read a specific event:

crow read<event-id>

Leave the event unread after printing:

crow read<event-id> --leave-unread

Filter unread lookup by app or event types:

crow read --app-id=123 --events=dispatch.received --events=recon.ready

Listen For Live Events

Start a local listener:

crow listen --public-url=https://your-public-url.example

The listener binds to 127.0.0.1:8787 by default and receives events at:

POST /crow/events
GET /health

Override the bind address:

crow listen --host=127.0.0.1 --port=8787

Start the listener without registering it with Crow:

crow listen --no-register

When registering with Crow, expose the local listener first and set CROW_LISTEN_PUBLIC_URL or pass --public-url.

Compatibility Aliases

The old Artisan-style command names are still available as aliases:

crow crow:plan
crow crow:read
crow crow:listen

The preferred CLI interface is:

crow plan
crow read
crow listen

Development

Install dependencies:

composer install

Run the test suite:

composer test

Inspect available commands:

php crow list

Build the PHAR:

php crow app:build crow --build-version=unreleased

Smoke-test the built artifact:

./builds/crow plan --help

Release Notes

This repository is now the standalone Crow CLI. It is no longer a Laravel installable package that auto-registers Artisan commands inside a host application.

For Packagist distribution, composer.json points its bin entry at builds/crow, so release builds should include a fresh PHAR artifact.

About

Command line interface for crowbot

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Crow CLI

Crow CLI is a standalone command-line companion for Crow developer handoffs. It reads queued Crow events, listens for live forwarded events, and fetches implementation-plan handoffs in formats that are ready to paste into an AI coding agent or use directly in a terminal workflow.

The app is built with Laravel Zero and ships as a PHAR-backed crow executable.

Installation

Once the package is published, install it globally with Composer:

composer global require crowbot/cli

Make sure Composer's global bin directory is on your PATH, then verify the install:

crow list

For local development from this repository:

composer install
php crow list

The checked-in PHAR build is available at:

./builds/crow list

Authentication

Run the login command:

crow auth login

The CLI prints the API-token page URL, attempts to open it in your browser, then prompts for the token. If your terminal supports clickable links, you can also open the printed URL directly.

Credentials are stored at:

<project>/.crow/config.json

When you run crow auth login from inside a project, the CLI writes credentials to that project's .crow/config.json. This lets different projects use different Crow accounts and API tokens. If no project root can be detected, credentials fall back to the global config at ~/.crow/config.json.

Use --global when you intentionally want shared credentials:

crow auth login --global

Config files are written with restrictive permissions where the platform supports it. Environment variables remain supported for automation and CI.

Configuration precedence is:

  1. Explicit command options, such as --api-token or --api-url
  2. Environment variables
  3. The nearest project config discovered by walking upward from the current directory: .crow/config.json
  4. Global config: ~/.crow/config.json
  5. Built-in defaults

Supported environment variables:

CROW_API_URL=https://crow.test/api/v1
CROW_API_TOKEN=your_token_here
CROW_APP_ID=
CROW_LISTEN_PUBLIC_URL=
CROW_LISTEN_HOST=127.0.0.1
CROW_LISTEN_PORT=8787
CROW_LISTEN_SECRET=

The current default API URL is https://crow.test/api/v1.

For automation or headless environments, pass the token and skip browser launch:

crow auth login --api-token=your_token_here --no-browser

To point one command at a specific config file, set CROW_CONFIG_PATH:

CROW_CONFIG_PATH=/path/to/.crow/config.json crow plan

Commands

Fetch Implementation Plans

List active implementation plans:

crow plan

Fetch a specific plan handoff:

crow plan <plan-id>

Print raw JSON:

crow plan <plan-id> --json

Write output to a file:

crow plan <plan-id> --output=handoff.md

Read Crow Events

Read the latest unread event:

crow read

Read a specific event:

crow read<event-id>

Leave the event unread after printing:

crow read<event-id> --leave-unread

Filter unread lookup by app or event types:

crow read --app-id=123 --events=dispatch.received --events=recon.ready

Listen For Live Events

Start a local listener:

crow listen --public-url=https://your-public-url.example

The listener binds to 127.0.0.1:8787 by default and receives events at:

POST /crow/events
GET /health

Override the bind address:

crow listen --host=127.0.0.1 --port=8787

Start the listener without registering it with Crow:

crow listen --no-register

When registering with Crow, expose the local listener first and set CROW_LISTEN_PUBLIC_URL or pass --public-url.

Compatibility Aliases

The old Artisan-style command names are still available as aliases:

crow crow:plan
crow crow:read
crow crow:listen

The preferred CLI interface is:

crow plan
crow read
crow listen

Development

Install dependencies:

composer install

Run the test suite:

composer test

Inspect available commands:

php crow list

Build the PHAR:

php crow app:build crow --build-version=unreleased

Smoke-test the built artifact:

./builds/crow plan --help

Release Notes

This repository is now the standalone Crow CLI. It is no longer a Laravel installable package that auto-registers Artisan commands inside a host application.

For Packagist distribution, composer.json points its bin entry at builds/crow, so release builds should include a fresh PHAR artifact.

About

Command line interface for crowbot

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Crow CLI

Crow CLI is a standalone command-line companion for Crow developer handoffs. It reads queued Crow events, listens for live forwarded events, and fetches implementation-plan handoffs in formats that are ready to paste into an AI coding agent or use directly in a terminal workflow.

The app is built with Laravel Zero and ships as a PHAR-backed crow executable.

Installation

Once the package is published, install it globally with Composer:

composer global require crowbot/cli

Make sure Composer's global bin directory is on your PATH, then verify the install:

crow list

For local development from this repository:

composer install
php crow list

The checked-in PHAR build is available at:

./builds/crow list

Authentication

Run the login command:

crow auth login

The CLI prints the API-token page URL, attempts to open it in your browser, then prompts for the token. If your terminal supports clickable links, you can also open the printed URL directly.

Credentials are stored at:

<project>/.crow/config.json

When you run crow auth login from inside a project, the CLI writes credentials to that project's .crow/config.json. This lets different projects use different Crow accounts and API tokens. If no project root can be detected, credentials fall back to the global config at ~/.crow/config.json.

Use --global when you intentionally want shared credentials:

crow auth login --global

Config files are written with restrictive permissions where the platform supports it. Environment variables remain supported for automation and CI.

Configuration precedence is:

  1. Explicit command options, such as --api-token or --api-url
  2. Environment variables
  3. The nearest project config discovered by walking upward from the current directory: .crow/config.json
  4. Global config: ~/.crow/config.json
  5. Built-in defaults

Supported environment variables:

CROW_API_URL=https://crow.test/api/v1
CROW_API_TOKEN=your_token_here
CROW_APP_ID=
CROW_LISTEN_PUBLIC_URL=
CROW_LISTEN_HOST=127.0.0.1
CROW_LISTEN_PORT=8787
CROW_LISTEN_SECRET=

The current default API URL is https://crow.test/api/v1.

For automation or headless environments, pass the token and skip browser launch:

crow auth login --api-token=your_token_here --no-browser

To point one command at a specific config file, set CROW_CONFIG_PATH:

CROW_CONFIG_PATH=/path/to/.crow/config.json crow plan

Commands

Fetch Implementation Plans

List active implementation plans:

crow plan

Fetch a specific plan handoff:

crow plan <plan-id>

Print raw JSON:

crow plan <plan-id> --json

Write output to a file:

crow plan <plan-id> --output=handoff.md

Read Crow Events

Read the latest unread event:

crow read

Read a specific event:

crow read<event-id>

Leave the event unread after printing:

crow read<event-id> --leave-unread

Filter unread lookup by app or event types:

crow read --app-id=123 --events=dispatch.received --events=recon.ready

Listen For Live Events

Start a local listener:

crow listen --public-url=https://your-public-url.example

The listener binds to 127.0.0.1:8787 by default and receives events at:

POST /crow/events
GET /health

Override the bind address:

crow listen --host=127.0.0.1 --port=8787

Start the listener without registering it with Crow:

crow listen --no-register

When registering with Crow, expose the local listener first and set CROW_LISTEN_PUBLIC_URL or pass --public-url.

Compatibility Aliases

The old Artisan-style command names are still available as aliases:

crow crow:plan
crow crow:read
crow crow:listen

The preferred CLI interface is:

crow plan
crow read
crow listen

Development

Install dependencies:

composer install

Run the test suite:

composer test

Inspect available commands:

php crow list

Build the PHAR:

php crow app:build crow --build-version=unreleased

Smoke-test the built artifact:

./builds/crow plan --help

Release Notes

This repository is now the standalone Crow CLI. It is no longer a Laravel installable package that auto-registers Artisan commands inside a host application.

For Packagist distribution, composer.json points its bin entry at builds/crow, so release builds should include a fresh PHAR artifact.

About

Command line interface for crowbot

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages