@agentled/cli 0.7.21 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +78 -0
- package/codex-plugin-hooks/agentled-hook-lib.mjs +13 -0
- package/codex-plugin-hooks/agentled-turn-guidance.mjs +8 -4
- package/dist/commands/agents.js +17 -12
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/chat.d.ts +1 -0
- package/dist/commands/chat.js +20 -1
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/dryrun.js +23 -3
- package/dist/commands/dryrun.js.map +1 -1
- package/dist/commands/use-cases.js +12 -4
- package/dist/commands/use-cases.js.map +1 -1
- package/dist/commands/workflows.js +3 -2
- package/dist/commands/workflows.js.map +1 -1
- package/dist/commands/workspace-views.d.ts +2 -0
- package/dist/commands/workspace-views.js +229 -0
- package/dist/commands/workspace-views.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/llms-full.txt +4 -1
- package/package.json +2 -2
- package/patterns/v1/08-composed-email-approval.md +6 -1
- package/skills/agentled/SKILL.md +45 -0
- package/skills/agentled/references/email-workflows.md +2 -1
- package/skills/agentled/references/step-schemas.md +1 -1
|
@@ -47,7 +47,7 @@ Sender identity lives on a workflow-level `inputPages` entry with `contextKey: "
|
|
|
47
47
|
"name": "Send Outreach Email",
|
|
48
48
|
"pipelineStepPrompt": {
|
|
49
49
|
"type": "email",
|
|
50
|
-
"template": "Draft a personalized email to {{steps.enrich.contact.fullName}} at {{steps.enrich.company.name}} introducing our offering. Keep it warm, concise, and specific to their role.",
|
|
50
|
+
"template": "Draft a personalized email to {{steps.enrich.contact.fullName}} at {{steps.enrich.company.name}} introducing our offering. Keep it warm, concise, and specific to their role. Format the body as email-safe HTML with one <p> per visual paragraph.",
|
|
51
51
|
"responseStructure": {
|
|
52
52
|
"email": {
|
|
53
53
|
"from": "{{context.outreachProfile.fromEmail}}",
|
|
@@ -109,6 +109,10 @@ pipelineStepPrompt:
|
|
|
109
109
|
|
|
110
110
|
Email clients render HTML bodies literally if the wrapping element is missing. Always generate email-safe HTML (`<p>`, `<br>`, `<a>`, `<strong>` — no CSS blocks, no `<script>`). Don't use markdown — the approval UI won't convert it.
|
|
111
111
|
|
|
112
|
+
**Email body as one collapsed paragraph:**
|
|
113
|
+
|
|
114
|
+
Email clients collapse newline-only text, so a body like `Hi Alberto, Quick confirmation... Best, Ouadie` renders as one hard-to-read block. Use separate `<p>` blocks for the greeting, each paragraph, links/CTA, and sign-off. Prefer `<a href="...">descriptive link text</a>` for long URLs instead of pasting raw links into the middle of a sentence.
|
|
115
|
+
|
|
112
116
|
**No `outreachProfile` input page:**
|
|
113
117
|
|
|
114
118
|
`{{context.outreachProfile.fromEmail}}` resolves to an empty string. The email has no sender. It may still send (from the default connected account) but you lose per-workflow sender control.
|
|
@@ -124,6 +128,7 @@ Before wiring a composed-email step into a workflow:
|
|
|
124
128
|
- [ ] `onApproval.action: "schedule-email"` is set
|
|
125
129
|
- [ ] `next.conditions.approvalRequired: true` on the outgoing edge
|
|
126
130
|
- [ ] Recipient and subject are derived from prior step output, not hardcoded
|
|
131
|
+
- [ ] `email.body` is readable email-safe HTML with separate paragraphs; it is not one plain-text block and does not rely on newline-only formatting
|
|
127
132
|
- [ ] The output page has `displayConfig.executionNameTemplate` with the entity and outreach state. For single-entity outreach, use `{{entityName}} - Email Drafted` before approval and `{{entityName}} - Email Sent` or `{{entityName}} - Contacted` after the post-send status step, e.g. `Joe Dan - VC Firm Name - Email Drafted`; add `{{today}}` only when a short date helps. For batch runs, summarize counts instead, e.g. `26 May - 4 sourced - 3 contacted`.
|
|
128
133
|
|
|
129
134
|
## When to use a generic approval gate instead
|
package/skills/agentled/SKILL.md
CHANGED
|
@@ -27,6 +27,7 @@ them; that defeats the point.
|
|
|
27
27
|
| Sourcing/collecting entities to act on later | `references/entity-pipeline.md` |
|
|
28
28
|
| Adding cross-execution memory | `references/persistent-memory.md` |
|
|
29
29
|
| Designing outbound / sales / investor / lead-gen at scale | `references/outreach-and-scale.md` |
|
|
30
|
+
| Designing a saved view of a list, funnel, queue, approvals surface, or multi-source workspace cockpit | `docs/WORKSPACE_VIEWS.md` |
|
|
30
31
|
| Producing local artifacts, or seeding a templated workspace's sidebar | `references/workspace-folder.md` |
|
|
31
32
|
| Picking apps, testing credit-efficiently, decoding a validation error | `references/credits-apps-and-errors.md` |
|
|
32
33
|
|
|
@@ -62,13 +63,34 @@ Before helping with any request, inspect the workspace. Use `agentled workspace
|
|
|
62
63
|
4. **`list_knowledge_lists`** — KG lists: contacts, companies, scored leads, status machines. Shapes what a new workflow reads from or writes to.
|
|
63
64
|
5. **`list_connections`** — Connected apps and integrations: know which enrichment, CRM, or email providers are already authed before designing steps that depend on them.
|
|
64
65
|
6. **`list_agents`** — Existing agents and routines: understand what is already running autonomously before adding new agents.
|
|
66
|
+
7. **`list_workspace_views`** — Saved operating surfaces: reuse or update a view before creating another dashboard/list/queue.
|
|
65
67
|
|
|
66
68
|
The workspace inspection directly informs which integrations are connected, what KG lists exist, whether new workflows should chain from or replace existing ones, and what existing agents already cover.
|
|
69
|
+
When referring to KG lists or text entries in user-facing replies, include both the human-readable name/title and the stable key/id, not just the id. Example: `VC Contacts (gtm_vc_contacts)`.
|
|
67
70
|
|
|
68
71
|
For existing workflow work, map the workflow back to its use case before making claims or edits: run `agentled workflows get <workflowId> --format json`, inspect `useCaseContext`, then run `agentled use-cases get <key-or-workflowGraphId> --format json` and read each `operatingGuides` knowledge text with the provided read command. If `agentGuidance.warnings` includes `MISSING_USE_CASE_OPERATING_GUIDE`, say the use-case README is missing and create/update the linked knowledge text before treating the context as complete.
|
|
69
72
|
|
|
70
73
|
> **Shortcut:** `agentled workspace inspect --json` returns all six contexts as one consolidated response. Use it at session start to load the full picture in a single call.
|
|
71
74
|
|
|
75
|
+
### Workspace views
|
|
76
|
+
|
|
77
|
+
When the user asks for a reusable view of a KG list, funnel, action queue,
|
|
78
|
+
approval inbox, workflow report, agent/routine state, or combined operating
|
|
79
|
+
surface, use `WorkspaceView`. It is a saved manifest over live workspace data,
|
|
80
|
+
not a KG-only report and not an action executor.
|
|
81
|
+
|
|
82
|
+
- Inspect existing views first: `list_workspace_views` or `agentled views list`.
|
|
83
|
+
- Create/update only the manifest: data sources, filters/transforms,
|
|
84
|
+
`ConfigLayout` layout, actions, refresh/safety metadata.
|
|
85
|
+
- Use `name` for the full view page title and `navLabel` for short sidebar
|
|
86
|
+
copy. Use `placement` to attach pinned views to a use case or workflow group.
|
|
87
|
+
- Creating a view must not read providers, run workflows, mutate KG rows, send
|
|
88
|
+
messages, make approval decisions, or spend credits.
|
|
89
|
+
- Mark write/send/destructive actions with `approvalRequired: true` and use the
|
|
90
|
+
normal approval-aware tool when the user later asks to execute them.
|
|
91
|
+
- Prefer `draft` unless the user clearly approved the view becoming active or
|
|
92
|
+
pinned.
|
|
93
|
+
|
|
72
94
|
### MCP-connected but no local scaffold: expected behavior
|
|
73
95
|
|
|
74
96
|
If MCP tools are already connected and working, **do not block** on missing local folders.
|
|
@@ -119,6 +141,29 @@ agentled --workspace angelhive workspace inspect
|
|
|
119
141
|
AGENTLED_WORKSPACE=angelhive agentled workflows list
|
|
120
142
|
```
|
|
121
143
|
|
|
144
|
+
### CLI chat workflow handoffs
|
|
145
|
+
|
|
146
|
+
The web UI can call `monitorWorkflowExecution`, poll the resulting job, and
|
|
147
|
+
continue the assistant turn after the workflow becomes terminal. A CLI agent
|
|
148
|
+
must perform that continuation itself.
|
|
149
|
+
|
|
150
|
+
If `agentled chat` or `agentled chat-result` says a workflow was started, do
|
|
151
|
+
not treat the completed chat turn as the completed user request. Capture the
|
|
152
|
+
returned `sessionId`, `workflowId`, `executionId` or `executionInputId`, then:
|
|
153
|
+
|
|
154
|
+
1. Resolve the execution with `agentled executions list <workflowId>` when
|
|
155
|
+
necessary.
|
|
156
|
+
2. Poll `agentled executions get <workflowId> <executionId>` until `completed`,
|
|
157
|
+
`failed`, `stopped`, or `canceled`.
|
|
158
|
+
3. Inspect the relevant output using `agentled executions step-output`.
|
|
159
|
+
4. Continue the original conversation with `agentled chat --session-id
|
|
160
|
+
<sessionId> "...terminal result context..."` so the assistant reports the
|
|
161
|
+
verified result and does not restart the workflow.
|
|
162
|
+
|
|
163
|
+
Never resend the original request while its durable chat turn or workflow is
|
|
164
|
+
still running. A response such as `Run started` is a workflow handoff, not the
|
|
165
|
+
final answer.
|
|
166
|
+
|
|
122
167
|
### External builder setup
|
|
123
168
|
|
|
124
169
|
When this session is acting as an external AI builder for Agentled work items,
|
|
@@ -73,7 +73,7 @@ When a workflow sends emails, add an outreach profile input page to `context.inp
|
|
|
73
73
|
"name": "Send Email",
|
|
74
74
|
"pipelineStepPrompt": {
|
|
75
75
|
"type": "email",
|
|
76
|
-
"template": "Draft a personalized email...\n{{steps.previous_step.data}}\nReturn JSON ONLY per schema.",
|
|
76
|
+
"template": "Draft a personalized email...\n{{steps.previous_step.data}}\nFormat the body as email-safe HTML with one <p> per visual paragraph.\nReturn JSON ONLY per schema.",
|
|
77
77
|
"responseStructure": {
|
|
78
78
|
"email": {
|
|
79
79
|
"from": "{{context.outreachProfile.fromEmail}}",
|
|
@@ -118,5 +118,6 @@ When a workflow sends emails, add an outreach profile input page to `context.inp
|
|
|
118
118
|
- `onApproval.action: "schedule-email"` — triggers the actual send; without it, approval does nothing
|
|
119
119
|
- `next.conditions.approvalRequired: true` — blocks the pipeline until human approval
|
|
120
120
|
- Email body must be email-safe HTML (`<p>`, `<br>`, `<a>`, `<strong>` — no CSS, no scripts)
|
|
121
|
+
- Preserve readable email structure in `email.body`: use separate `<p>` blocks for the greeting, each paragraph, links/CTA, and sign-off; do not return the whole email as one plain-text paragraph, and do not rely on newline-only formatting because email clients collapse it.
|
|
121
122
|
- **Never** use separate "draft" + "gmail send" appAction steps for outreach
|
|
122
123
|
- Set an output page `displayConfig.executionNameTemplate` that names the entity and the outreach state. For single-entity outreach, use `{{entityName}} - Email Drafted` before approval and `{{entityName}} - Email Sent` or `{{entityName}} - Contacted` after the post-send status step, e.g. `Joe Dan - VC Firm Name - Email Drafted`; add `{{today}}` only when a short date helps. For batch runs, summarize counts instead, e.g. `26 May - 4 sourced - 3 contacted`.
|
|
@@ -87,7 +87,7 @@ AI steps can optionally specify a model and provider via the `agent` field:
|
|
|
87
87
|
| `anthropic` | `claude-4-6-sonnet`, `claude-4-5-haiku`, `claude-4-6-opus` |
|
|
88
88
|
| `google` | `gemini-3-pro`, `gemini-3-flash`, `gemini-2.5-pro`, `gemini-2.5-flash` |
|
|
89
89
|
| `mistral` | `mistral-large-latest`, `mistral-small-latest`, `codestral-latest` |
|
|
90
|
-
| `deepseek` | `deepseek-
|
|
90
|
+
| `deepseek` | `deepseek-v4-flash`, `deepseek-v4-pro` (`deepseek-chat` and `deepseek-reasoner` are legacy aliases retiring 2026-07-24) |
|
|
91
91
|
| `kimi` | `kimi-k2.5` |
|
|
92
92
|
| `minimax` | `minimax-m2.5` |
|
|
93
93
|
| `bytedance` | `doubao-seed-1.6-flash`, `seed-2.0-mini`, `doubao-seed-1.8-beta` |
|