@fnmoa/cli 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/LICENSE +31 -0
  2. package/README.md +273 -70
  3. package/dist/assets/worker.js +216 -0
  4. package/dist/main.js +326 -0
  5. package/package.json +34 -27
  6. package/dist/args.js +0 -33
  7. package/dist/args.js.map +0 -1
  8. package/dist/client.js +0 -103
  9. package/dist/client.js.map +0 -1
  10. package/dist/command.js +0 -2
  11. package/dist/command.js.map +0 -1
  12. package/dist/commands/config.js +0 -129
  13. package/dist/commands/config.js.map +0 -1
  14. package/dist/commands/github.js +0 -19
  15. package/dist/commands/github.js.map +0 -1
  16. package/dist/commands/login.js +0 -128
  17. package/dist/commands/login.js.map +0 -1
  18. package/dist/commands/oracle.js +0 -86
  19. package/dist/commands/oracle.js.map +0 -1
  20. package/dist/commands/repos.js +0 -70
  21. package/dist/commands/repos.js.map +0 -1
  22. package/dist/commands/skills.js +0 -225
  23. package/dist/commands/skills.js.map +0 -1
  24. package/dist/commands/status.js +0 -78
  25. package/dist/commands/status.js.map +0 -1
  26. package/dist/commands/tasks.js +0 -171
  27. package/dist/commands/tasks.js.map +0 -1
  28. package/dist/commands/track.js +0 -31
  29. package/dist/commands/track.js.map +0 -1
  30. package/dist/commands/whoami.js +0 -22
  31. package/dist/commands/whoami.js.map +0 -1
  32. package/dist/commands/workflows.js +0 -304
  33. package/dist/commands/workflows.js.map +0 -1
  34. package/dist/config.js +0 -65
  35. package/dist/config.js.map +0 -1
  36. package/dist/index.js +0 -105
  37. package/dist/index.js.map +0 -1
  38. package/dist/poll.js +0 -24
  39. package/dist/poll.js.map +0 -1
  40. package/dist/registry.js +0 -56
  41. package/dist/registry.js.map +0 -1
  42. package/dist/ui.js +0 -56
  43. package/dist/ui.js.map +0 -1
  44. package/src/skills/moa-oracle/SKILL.md +0 -35
  45. package/src/skills/moa-profiles/SKILL.md +0 -49
  46. package/src/skills/moa-review-pr/SKILL.md +0 -47
  47. package/src/skills/moa-run-task/SKILL.md +0 -44
  48. package/src/skills/moa-setup/SKILL.md +0 -60
  49. package/src/skills/moa-ship-issue/SKILL.md +0 -54
  50. package/src/skills/moa-triage-audit/SKILL.md +0 -47
package/dist/registry.js DELETED
@@ -1,56 +0,0 @@
1
- import { statusCmd, setupCmd } from './commands/status.js';
2
- import { loginCmd } from './commands/login.js';
3
- import { skillsCmd } from './commands/skills.js';
4
- import { whoamiCmd } from './commands/whoami.js';
5
- import { trackCmd } from './commands/track.js';
6
- import { tasksCmd, taskCmd, runCmd, cancelCmd } from './commands/tasks.js';
7
- import { wfCmd } from './commands/workflows.js';
8
- import { ghCmd } from './commands/github.js';
9
- import { repoCmd } from './commands/repos.js';
10
- import { oracleCmd } from './commands/oracle.js';
11
- import { configCmd } from './commands/config.js';
12
- /** Every top-level command. Add a module here to extend the CLI. */
13
- export const COMMANDS = [
14
- loginCmd,
15
- statusCmd,
16
- setupCmd,
17
- whoamiCmd,
18
- tasksCmd,
19
- taskCmd,
20
- runCmd,
21
- cancelCmd,
22
- wfCmd,
23
- trackCmd,
24
- ghCmd,
25
- repoCmd,
26
- oracleCmd,
27
- configCmd,
28
- skillsCmd,
29
- ];
30
- export function findCommand(name) {
31
- return COMMANDS.find((cmd) => cmd.name === name);
32
- }
33
- const metaOf = (cmd) => ({
34
- name: cmd.name,
35
- group: cmd.group,
36
- summary: cmd.summary,
37
- usage: cmd.usage,
38
- args: cmd.args,
39
- examples: cmd.examples,
40
- });
41
- /**
42
- * The machine-readable command catalog — the AI knowledge base. Flattens
43
- * commands + their sub-actions into a flat, documented list. Emitted by
44
- * `moa help --json` so an agent can discover every capability and its usage.
45
- */
46
- export function catalog() {
47
- const out = [];
48
- for (const cmd of COMMANDS) {
49
- if (cmd.subcommands?.length)
50
- out.push(...cmd.subcommands);
51
- else
52
- out.push(metaOf(cmd));
53
- }
54
- return out;
55
- }
56
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD,oEAAoE;AACpE,MAAM,CAAC,MAAM,QAAQ,GAAc;IACjC,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,OAAO;IACP,MAAM;IACN,SAAS;IACT,KAAK;IACL,QAAQ;IACR,KAAK;IACL,OAAO;IACP,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,GAAY,EAAe,EAAE,CAAC,CAAC;IAC7C,IAAI,EAAE,GAAG,CAAC,IAAI;IACd,KAAK,EAAE,GAAG,CAAC,KAAK;IAChB,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,KAAK,EAAE,GAAG,CAAC,KAAK;IAChB,IAAI,EAAE,GAAG,CAAC,IAAI;IACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;CACvB,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,OAAO;IACrB,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,WAAW,EAAE,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;;YACrD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
package/dist/ui.js DELETED
@@ -1,56 +0,0 @@
1
- // Terminal formatting helpers (color-aware, respects NO_COLOR / non-TTY).
2
- const noColor = !!process.env.NO_COLOR || !process.stdout.isTTY;
3
- const wrap = (code) => (s) => (noColor ? `${s}` : `\x1b[${code}m${s}\x1b[0m`);
4
- export const c = {
5
- dim: wrap('2'),
6
- bold: wrap('1'),
7
- green: wrap('32'),
8
- red: wrap('31'),
9
- yellow: wrap('33'),
10
- cyan: wrap('36'),
11
- amber: wrap('33'),
12
- };
13
- /** 256-color foreground (no-op when color is disabled). */
14
- const fg = (n) => (s) => (noColor ? s : `\x1b[38;5;${n}m${s}\x1b[0m`);
15
- // fnmoa wordmark in block letters, colored top→bottom as a cyan→blue gradient.
16
- const LOGO = [
17
- '█████ █ █ █ █ ███ ███ ',
18
- '█ ██ █ ██ ██ █ █ █ █',
19
- '████ █ █ █ █ █ █ █ █ █████',
20
- '█ █ ██ █ █ █ █ █ █',
21
- '█ █ █ █ █ ███ █ █',
22
- ];
23
- const LOGO_FG = [51, 45, 39, 33, 27];
24
- /** The fnmoa banner — wordmark + tagline, gradient-colored. */
25
- export function banner() {
26
- const art = LOGO.map((line, i) => ' ' + fg(LOGO_FG[i])(line)).join('\n');
27
- return `\n${art}\n ${c.dim('autonomous GitHub coding workflows')}\n`;
28
- }
29
- export const statusColor = (s) => s === 'succeeded'
30
- ? c.green(s)
31
- : s === 'failed'
32
- ? c.red(s)
33
- : s === 'running' || s === 'queued'
34
- ? c.yellow(s)
35
- : c.dim(s);
36
- /** Relative time for list columns: "5s ago", "3m ago", "2h ago", "4d ago". */
37
- export function relTime(when) {
38
- if (!when)
39
- return '';
40
- const t = new Date(when).getTime();
41
- if (!Number.isFinite(t))
42
- return '';
43
- const s = Math.max(0, Math.floor((Date.now() - t) / 1000));
44
- if (s < 60)
45
- return `${s}s ago`;
46
- if (s < 3600)
47
- return `${Math.floor(s / 60)}m ago`;
48
- if (s < 86400)
49
- return `${Math.floor(s / 3600)}h ago`;
50
- return `${Math.floor(s / 86400)}d ago`;
51
- }
52
- export function die(msg) {
53
- console.error(c.red(`✗ ${msg}`));
54
- process.exit(1);
55
- }
56
- //# sourceMappingURL=ui.js.map
package/dist/ui.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AAChE,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,CAAkB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;AAEvG,MAAM,CAAC,MAAM,CAAC,GAAG;IACf,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;IACd,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;IACf,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;IACjB,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;IACf,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;IAChB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;CAClB,CAAC;AAEF,2DAA2D;AAC3D,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAEtF,+EAA+E;AAC/E,MAAM,IAAI,GAAG;IACX,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;CAChC,CAAC;AACF,MAAM,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAErC,+DAA+D;AAC/D,MAAM,UAAU,MAAM;IACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,OAAO,KAAK,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,oCAAoC,CAAC,IAAI,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAS,EAAU,EAAE,CAC/C,CAAC,KAAK,WAAW;IACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC,KAAK,QAAQ;QACd,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACV,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,QAAQ;YACjC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACb,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEnB,8EAA8E;AAC9E,MAAM,UAAU,OAAO,CAAC,IAA+B;IACrD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC/B,IAAI,CAAC,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;IAClD,IAAI,CAAC,GAAG,KAAK;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;IACrD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,GAAW;IAC7B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -1,35 +0,0 @@
1
- ---
2
- name: moa-oracle
3
- description: >-
4
- Consult Moa's domain knowledge-base oracles — `moa oracle list` to see domains,
5
- `moa oracle consult <domain> "<question>"` to ask, `moa oracle history` to review past
6
- answers. Use to get a read-only answer sourced strictly from a specific knowledge base.
7
- ---
8
-
9
- # Consult Moa oracles
10
-
11
- An **oracle** is a read-only knowledge base. A `<domain>-oracle` subagent answers
12
- questions **only from that KB** — useful for grounded, source-bounded answers. Requires
13
- a connected CLI (see **moa-setup**).
14
-
15
- ## Use
16
-
17
- ```sh
18
- moa oracle list # available domains
19
- moa oracle consult <domain> "<question>" --watch # ask; --watch streams to the answer
20
- moa oracle history # past consultations (--limit N, --json)
21
- ```
22
-
23
- Example:
24
-
25
- ```sh
26
- moa oracle list
27
- moa oracle consult architecture "how do workflow runs isolate git worktrees?" --watch
28
- ```
29
-
30
- ## Notes
31
-
32
- - Answers are bounded to the KB — if the KB doesn't cover it, the oracle says so rather
33
- than guessing.
34
- - `--watch` exits non-zero if the consultation fails.
35
- - `moa status` lists the oracle domains the server currently exposes.
@@ -1,49 +0,0 @@
1
- ---
2
- name: moa-profiles
3
- description: >-
4
- Act as multiple operators or orgs with Moa CLI profiles — `moa config add/use`, a
5
- per-command `--profile` override, `$MOA_PROFILE`, and `moa whoami`. Use for
6
- multi-operator review flows (solver ≠ reviewer) or driving several workspaces/orgs.
7
- ---
8
-
9
- # Multi-operator / multi-org profiles
10
-
11
- `~/.moa/cli.json` holds **named profiles** — each is one operator: a workspace URL + an
12
- API key. Profiles are how you run flows that need more than one identity (e.g. one
13
- operator solves, another reviews) or target multiple workspaces/orgs. Requires a
14
- connected CLI (see **moa-setup**).
15
-
16
- ## Manage profiles
17
-
18
- ```sh
19
- moa config add owner --url <url> --key <ownerKey> --label "owner"
20
- moa config add member --url <url> --key <memberKey> --label "member"
21
- moa config use member # switch the active profile
22
- moa config # show active + list (● = active)
23
- moa config remove <name>
24
- ```
25
-
26
- ## Pick an identity per command
27
-
28
- ```sh
29
- moa <cmd> --profile owner # one-off override (no switch)
30
- MOA_PROFILE=owner moa <cmd> # same, via env var
31
- moa whoami # who am I right now (+ GitHub login)
32
- ```
33
-
34
- Precedence: `--profile <name>` → `$MOA_PROFILE` → active (`config use`) → `default`.
35
-
36
- ## Why it matters
37
-
38
- - **Author ≠ reviewer:** GitHub blocks approving your own PR, so the realistic review
39
- loop needs two operators:
40
- ```sh
41
- moa config use owner
42
- moa wf solve <repo> <issue#> --watch
43
- MOA_PROFILE=member moa wf review <repo> <pr#> --watch
44
- moa wf merge <repo> <pr#> --watch
45
- ```
46
- - **Multiple orgs/workspaces:** give each its own profile (distinct URL + key) and switch
47
- with `moa config use`.
48
-
49
- Field precedence within a profile: `env ($MOA_API_URL / $MOA_API_KEY) → profile → default`.
@@ -1,47 +0,0 @@
1
- ---
2
- name: moa-review-pr
3
- description: >-
4
- Review and unblock pull requests with Moa — `moa wf review` for a structured verdict,
5
- `moa wf address` to apply review feedback, `moa wf fix-ci` to get red CI green, and
6
- `moa wf review-fix` to converge to approval. Use to review a PR, address comments, or
7
- fix failing checks.
8
- ---
9
-
10
- # Review & unblock PRs with Moa
11
-
12
- Requires a connected CLI (see **moa-setup**). Repos are `owner/repo`; add `--watch` to
13
- stream the timeline (exits non-zero on failure).
14
-
15
- ## Review a PR
16
-
17
- ```sh
18
- moa wf pending # your review inbox
19
- moa wf review <repo> <pr#> --watch # → APPROVE / REQUEST_CHANGES + inline comments
20
- ```
21
-
22
- The pipeline reconciles review state live from GitHub, so a review by **any** operator
23
- (or done directly on GitHub) advances the track — solver and reviewer needn't match.
24
-
25
- ## Unblock a PR
26
-
27
- | Situation | Command | What it does |
28
- |---|---|---|
29
- | Reviewer asked for changes | `moa wf address <repo> <pr#>` | applies the feedback, pushes to the PR branch |
30
- | CI is red | `moa wf fix-ci <repo> <pr#>` | reads checks/logs, pushes a fix |
31
- | Want it to reach APPROVE | `moa wf review-fix <repo> <pr#>` | loops review → fix → re-review until approved |
32
-
33
- ```sh
34
- moa wf fix-ci <repo> <pr#> --watch # diagnose failing checks → push a fix
35
- moa wf address <repo> <pr#> --watch # turn review comments into a commit
36
- moa wf review-fix <repo> <pr#> --watch # converge to APPROVE + a fix commit
37
- ```
38
-
39
- Then merge once approved + green (see **moa-ship-issue**): `moa wf merge <repo> <pr#> --watch`.
40
-
41
- ## Notes
42
-
43
- - **Self-review:** GitHub won't let a PR's author approve/request-changes their own PR
44
- (only comment). Review as a different operator — see **moa-profiles**.
45
- - **`address` vs `review-fix`:** `address` applies existing feedback once; `review-fix`
46
- owns the whole review↔fix loop until it converges.
47
- - Inspect progress with `moa wf get <id> --watch`; failed checks and cost are shown there.
@@ -1,44 +0,0 @@
1
- ---
2
- name: moa-run-task
3
- description: >-
4
- Run an ad-hoc Moa agent task outside the GitHub workflow — `moa run "<prompt>" --dir
5
- <path> --watch`, inspect with `moa task`, cancel a run, and track cost. Use for one-off
6
- coding or analysis tasks not tied to an issue or PR.
7
- ---
8
-
9
- # Ad-hoc agent tasks with Moa
10
-
11
- For work that isn't an issue/PR workflow, run the agent directly. Tasks are async:
12
- `moa run` returns immediately as `queued`, then the run goes
13
- `queued → running → succeeded | failed | canceled`. Requires a connected CLI (see
14
- **moa-setup**).
15
-
16
- ## Run
17
-
18
- ```sh
19
- moa run "add a hello() to src/index.ts" --watch
20
- moa run "<prompt>" --dir /path/to/repo --watch # run against a specific directory
21
- moa run "<prompt>" --autonomous --watch # less interactive, more autonomy
22
- ```
23
-
24
- `--watch` streams the live activity feed until the task finishes (and exits non-zero
25
- if it fails).
26
-
27
- ## Inspect & manage
28
-
29
- ```sh
30
- moa tasks # recent tasks (--limit N, default 30; --json for raw)
31
- moa task <id> # one task: result, sessionId, numTurns, costUsd
32
- moa task <id> --json # raw API response
33
- moa cancel <taskId> # kill a running task (cancels its claude child)
34
- ```
35
-
36
- `moa task <id>` accepts a unique id prefix.
37
-
38
- ## Notes
39
-
40
- - Each task is one `claude` child process; **cancel** kills it.
41
- - Cost: every finished task reports `costUsd`; `moa status --spend` shows the cumulative
42
- total for the operator.
43
- - For GitHub-driven work (issue→PR, review, fix-CI, merge), use the workflow skills:
44
- **moa-ship-issue** and **moa-review-pr**.
@@ -1,60 +0,0 @@
1
- ---
2
- name: moa-setup
3
- description: >-
4
- Install and connect the `moa` CLI (@fnmoa/cli) to a Moa workspace — npm install,
5
- `moa login`, verify the Claude/GitHub connectors, and run a first status check.
6
- Use when setting up Moa for the first time, moving to a new machine, or
7
- troubleshooting auth errors like "auto-bootstrap is unavailable".
8
- ---
9
-
10
- # Setting up the `moa` CLI
11
-
12
- `moa` is a terminal client for a Moa **workspace** (an HTTP API). It authenticates
13
- with an `x-api-key` and defaults to `https://api.fnmoa.com`.
14
-
15
- ## 1. Install
16
-
17
- ```sh
18
- npm i -g @fnmoa/cli
19
- moa --help
20
- ```
21
-
22
- ## 2. Connect
23
-
24
- ```sh
25
- moa login # interactive: server URL (default api.fnmoa.com) + API key
26
- ```
27
-
28
- `moa login` also starts automatically the first time you run bare `moa` with no
29
- config. It saves to `~/.moa/cli.json` and verifies the key against the server. Grab
30
- your API key from the Moa dashboard.
31
-
32
- Non-interactive equivalent (CI, scripts):
33
-
34
- ```sh
35
- moa config set url https://api.fnmoa.com
36
- moa config set key <api-key>
37
- # or per-shell: export MOA_API_URL=… MOA_API_KEY=…
38
- ```
39
-
40
- ## 3. Verify
41
-
42
- ```sh
43
- moa whoami # which operator am I (+ GitHub login)
44
- moa setup # connector status: claude (connected?) · github (@login?)
45
- moa status # server snapshot: oracles, task/session counts, queue
46
- ```
47
-
48
- ## Troubleshooting
49
-
50
- - **`auto-bootstrap is unavailable … (enrolled to a control-plane)`** — the workspace
51
- requires a pre-issued key. Run `moa login` (or `moa config set key <key>`); the key
52
- comes from the dashboard, not auto-bootstrap.
53
- - **`cannot reach <url>`** — wrong URL or server down. Re-check with `moa config`, fix
54
- with `moa config set url <url>`.
55
- - **`key rejected`** — the key is wrong/expired; re-run `moa login` with a fresh key.
56
- - **Connectors not connected** (`moa setup` shows red) — connect Claude/GitHub from the
57
- dashboard; the workflows need them.
58
-
59
- Config precedence per field: `env ($MOA_API_URL / $MOA_API_KEY) → active profile → default`.
60
- For multiple operators or orgs, see the **moa-profiles** skill.
@@ -1,54 +0,0 @@
1
- ---
2
- name: moa-ship-issue
3
- description: >-
4
- Turn a GitHub issue into a merged PR with Moa — `moa wf solve` to implement and open
5
- a PR, review it, then `moa wf merge`. Watch each run's live timeline. Use when you
6
- want Moa to implement a known issue end-to-end and ship it.
7
- ---
8
-
9
- # Ship an issue with Moa (issue → PR → merge)
10
-
11
- Moa reads the issue, writes the code behind a verify gate (the repo's tests), and
12
- opens a PR — the git/gh is deterministic; the agent only reasons. It never commits or
13
- merges on its own; the workflow does. Requires a connected CLI (see **moa-setup**).
14
-
15
- Repos are `owner/repo`. Add `--watch` to stream the step timeline until the run ends
16
- (a watch exits non-zero if the run fails/cancels).
17
-
18
- ## The happy path
19
-
20
- ```sh
21
- moa wf solve <repo> <issue#> --watch # agent codes → verify gate → opens PR
22
- moa wf review <repo> <pr#> --watch # structured verdict + inline comments
23
- moa wf merge <repo> <pr#> --watch # guarded: needs approved + green
24
- ```
25
-
26
- Check state any time:
27
-
28
- ```sh
29
- moa track <repo> # the issue's pipeline stage (… → branched → pr → merged)
30
- moa wf list # recent runs
31
- moa wf get <id> --watch # one run + its step timeline (and cost)
32
- moa wf pending # your review inbox (issues/PRs awaiting you)
33
- ```
34
-
35
- ## Variations
36
-
37
- | Goal | Command |
38
- |---|---|
39
- | Issue → branch only (no PR), re-runnable | `moa wf branch <repo> <issue#>` |
40
- | Open a PR from an existing branch | `moa wf open-pr <repo> <issue#>` |
41
- | Apply review feedback to the PR | `moa wf address <repo> <pr#>` |
42
- | Get failing CI green | `moa wf fix-ci <repo> <pr#>` |
43
- | Review → fix → re-review until APPROVE | `moa wf review-fix <repo> <pr#>` |
44
-
45
- For reviewing/unblocking PRs in depth, see **moa-review-pr**.
46
-
47
- ## Notes
48
-
49
- - **Author ≠ reviewer:** GitHub blocks approving your own PR. Use a second operator
50
- (see **moa-profiles**) or let the `review` workflow post the verdict.
51
- - **Verify gate:** `solve` runs the repo's tests before pushing — a repo with no test
52
- script weakens the signal.
53
- - **Cost:** each run reports `costUsd`; `moa wf get <id>` shows per-run cost. Add
54
- `moa status --spend` for the cumulative total.
@@ -1,47 +0,0 @@
1
- ---
2
- name: moa-triage-audit
3
- description: >-
4
- Discover and categorize work with Moa — `moa wf triage` to categorize/label an issue,
5
- and `moa wf report-issue` to audit a repo and file new GitHub issues. Use to triage an
6
- incoming issue or have Moa audit a codebase and file what it finds.
7
- ---
8
-
9
- # Triage & audit with Moa
10
-
11
- Requires a connected CLI (see **moa-setup**). Repos are `owner/repo`; add `--watch` to
12
- stream the timeline.
13
-
14
- ## Triage an existing issue
15
-
16
- ```sh
17
- moa wf triage <repo> <issue#> --watch # read-only: categorize / suggest labels
18
- ```
19
-
20
- Use it to sort an incoming issue before deciding whether to `solve` it
21
- (see **moa-ship-issue**).
22
-
23
- ## Audit a repo and file issues
24
-
25
- `report-issue` is **repo-level** (no issue/PR number): the agent reads the repo, recalls
26
- past hotspots from memory, audits it — optionally focused by `--instruction` — and files
27
- its findings as GitHub issue(s).
28
-
29
- ```sh
30
- moa wf report-issue <repo> --watch
31
- moa wf report-issue <repo> --instruction "audit src/ for missing input validation and unhandled edge cases" --watch
32
- ```
33
-
34
- Omit `--instruction` for a general audit; the agent decides what's worth filing. This is
35
- how you point Moa at a codebase to *discover* work rather than act on a known item. It
36
- files issues on the **target repo** — it is not a channel for reporting bugs about Moa
37
- itself.
38
-
39
- ## See what's open
40
-
41
- ```sh
42
- moa gh issues # open issues Moa can see
43
- moa gh pulls # open PRs
44
- moa track <repo> # per-issue pipeline stages
45
- ```
46
-
47
- Next: turn a filed/triaged issue into a PR with **moa-ship-issue**.