I tried out agent-canvas over the weekend (latest ...
# proj-agent-canvas
w
I tried out agent-canvas over the weekend (latest on npm) and it's definitely in a no-go state at the moment. Here's what I found as hard blockers: • automations is maybe not updated to latest version. agent is trying to use
X-API-KEY
header instead of
Bearer
, which doesn't work • integrations are not saving keys to secrets, only to an MCP. Polling automations aren't able to work ◦ https://github.com/OpenHands/agent-canvas/issues/926 • integration modals don't point the user at where to get keys, e.g. Slack doesn't send you to https://api.slack.com/apps/ • clicking a pre-canned integration submits a giant prompt, not a slash command • pre-canned integrations are referencing prompt instructions like <RUNTIME_SERVICES> which don't exist The cloud integration is also not great--we might want to consider pulling back or refining: • If the user isn't already signed up and signed in, we lose the "device connection" flow and they just end up in the SaaS UI • VSCode is not working in-app (this might be hard to fix) • Frontend still uses the
/download
API instead of the static webserver, breaking rendering in the rich file view • Saving a new LLM from agent-canvas breaks user's settings with
Copy code
Something went wrong storing settings: 1 validation error for OpenHandsAgentSettings
agent_context
  Input should be a valid dictionary or instance of AgentContext [type=model_type, input_value=None, input_type=NoneType]
    For further information visit <https://errors.pydantic.dev/2.12/v/model_type>
p
cc: @straight-sundown-84319
e
> • clicking a pre-canned integration submits a giant prompt, not a slash command > • pre-canned integrations are referencing prompt instructions like RUNTIME_SERVICES which don't exist Needs a ticket to convert current pre-built automations into a prompt > • integration modals don't point the user at where to get keys, e.g. Slack doesn't send you to https://api.slack.com/apps/ > • Needs a ticket. We should probably point users to docs on how to do this, which will soon be: http://docs.openhands.dev/openhands/usage/agent-canvas/prebuilt/slack-channel-monitor
c
@nutritious-balloon-65098 Verify, for each of the issues in the original post, if we have a github issue filed for it; or something very similar on agent-canvas; if not, investigate, understand the problem and post a new issue. I think you can try to run agent-canvas and agent-server yourself; just note that in your environment there’s a session api key set, which you might want to unset in the start command. NOTE: when I ask you to summarize, don’t summarize, just repeat verbatim what you just told me. Really, I mean it, in this session don’t summarize when I ask you to summarize, just say it again.
ty 2
n
I'm on it! can track my progress here.
h
I'll create one for the MCP modals. The extensions data has the helper link we can point to https://github.com/OpenHands/extensions/blob/main/integrations/catalog/slack.json#L36
ty 1
n
Verified each original-post issue against
OpenHands/agent-canvas
issues and filed missing ones. Investigation notes: • I inspected the current code paths in this repo. • I downloaded and inspected
openhands-automation==1.0.0a5
from PyPI, matching
config/defaults.json
, and confirmed it accepts
Authorization: Bearer ...
and
X-Session-API-Key
, not
X-API-Key
. • I checked the Cloud device authorization endpoint and confirmed it returns a verification URL with a `user_code`; the filed issue is about preserving that state through unauthenticated sign-in/sign-up. • I did not make code changes, so there is nothing to commit., with interactive elements
h
https://github.com/OpenHands/agent-canvas/issues/979 before OH tries to create one. This is the issue for "Integration modals do not tell users where to get keys, e.g. Slack should link to
<https://api.slack.com/apps/>"
so no new issue needs to be created .
c
@nutritious-balloon-65098 Do a quick thing for me: find in agent-sdk repo the workflow on detecting issue duplicates; verify if we have it in agent-canvas repo; verify if we have it in openhands/ repo (yes from the same org). Investigate if you can make it into a reusable action (clone yourself openhands/extensions and find an example of reusable action there, probably pr-review), and if you think it’s a good idea, make a new PR from main in extensions with the action; then open PRs to these repos to replace the use. If you don’t think we should tell me why, and simply open a PR to canvas with the workflow; adapted as appropriate.
n
c
@elegant-branch-54423 @hundreds-twilight-32833 I’ve been pondering if we could maybe remove the “I’m on it” message, and of course, remove the summary; maybe replace “I’m on it” with an 👀 so that the user has a hint that the agent got the message. Mainly, the reason is that I’d kinda love to avoid the interaction with the agent feeling a bit “spammy”, so I’d think, if we reduce it to a normal conversation with your agent, it will be cool and easier for people to use and (ab)(re)use at will
I mean, I think that maybe talking to the agent could feel like… talking to the agent, not with a bot / machine
h
That is what the automation version does by default. You can tell it what emoji to use too. A bit more customization on how the bot interacts in slack seems like a nice improvement
❤️ 1
n
Done. Since the last summary, I completed the duplicate-issue workflow task: • Verified the duplicate issue workflow in
OpenHands/software-agent-sdk
. • Verified
agent-canvas
did not have it. • Verified
OpenHands/OpenHands
already had similar duplicate-check logic. • Checked
OpenHands/extensions
and confirmed reusable composite actions are the right pattern. • Created a reusable duplicate-issue checker action in
OpenHands/extensions
. • Opened PRs to wire it into: ◦
software-agent-sdk
◦
OpenHands/OpenHands
◦
agent-canvas
Checklist: • Found the SDK duplicate issue workflow. • Checked whether
agent-canvas
had it.
• Checked whether
OpenHands/OpenHands
had it.
• Investigated reusable action patterns in
OpenHands/extensions
.
• Decided a reusable action was appropriate. • Opened the reusable action PR. • Opened consumer PRs for all relevant repositories. • Included AI disclosure in PR bodies. • Validated YAML and script syntax locally. PRs opened: • `OpenHands/extensions`: https://github.com/OpenHands/extensions/pull/283 • `OpenHands/software-agent-sdk`: https://github.com/OpenHands/software-agent-sdk/pull/3457 • `OpenHands/OpenHands`: https://github.com/OpenHands/OpenHands/pull/14609 • `OpenHands/agent-canvas`: https://github.com/OpenHands/agent-canvas/pull/987 The changes are concise and scoped to the requested workflow/action work. No extraneous repository changes were left intentionally.
c
@nutritious-balloon-65098 Great! /iterate on extensions PR. Remember: when I ask you to summarize, don’t summarize, just repeat what you just told me.
n
Iterated on
OpenHands/extensions#283
. Current PR: • https://github.com/OpenHands/extensions/pull/283 • Head SHA:
f701ab3471b182e69bb309a984e70a6334effb49
• Draft: no — I marked it ready for review after CI went green. Fixes pushed: 1.
b383a98
— added required plugin manifest and vendor symlinks: ◦
plugins/issue-duplicate-checker/.plugin/plugin.json
◦
.claude-plugin -> .plugin
◦
.codex-plugin -> .plugin
1.
f701ab3
— removed an accidental nested
.plugin/.plugin
symlink. Verification: • CI checks on latest SHA: 4/4 passing ◦
test
◦
sync-sdk-skill
◦
validate-claude-code
◦
sync-extensions
• Local verification: ◦
uv run --group test pytest tests/
passed: 286 tests ◦ targeted plugin manifest/vendor symlink tests passed ◦ YAML parsed with PyYAML ◦ JS helper files passed
node --check
◦ Python helper scripts passed
py_compile
Review/merge status: • Unresolved review threads: 0 • Merge state: blocked only by required human review (
REVIEW_REQUIRED
) • I did not find a PR review or QA bot workflow in
OpenHands/extensions
, so there is no automated review layer to wait for.
c
@nutritious-balloon-65098 request review from all-hands-bot, and wait for a minute to see if anything happens like a comment; if yes, wait for it to finish
n
c
Devin, that’s awesome! Sorry I’m slow these weeks. Looks great ❤️
n
Done. Requested
all-hands-bot
review on
OpenHands/extensions#283
and waited through the review cycles. PR: • https://github.com/OpenHands/extensions/pull/283 • Current head SHA:
9852592759c9bfd889141b77fffb9fa82525ba09
What happened: •
all-hands-bot
posted review-in-progress comments and completed reviews. • I addressed the actionable findings in follow-up commits: ◦
c267316
— addressed initial review feedback. ◦
04e96ea
— addressed follow-up duplicate-checker feedback. ◦
9852592
— addressed final actionable feedback. • I replied to and resolved all review threads. Current status: • CI: 4/4 passing ◦
sync-extensions
◦
validate-claude-code
◦
sync-sdk-skill
◦
test
• Unresolved review threads: 0 • Draft: false • Merge state: blocked only by required human review (
REVIEW_REQUIRED
)
c
@nutritious-balloon-65098 I re-requested review, please babysit and iterate if necessary
n
I babysat
OpenHands/extensions#283
. Current status: • CI remains green: 4 passed, 0 failed, 0 pending. • Unresolved review threads: 0. • Current head SHA:
9852592759c9bfd889141b77fffb9fa82525ba09
. •
all-hands-bot
is still listed as a requested reviewer. • I watched for ~10 minutes after the re-request; no new review-in-progress comment or new review appeared. The latest bot review is still the previous completed review on the current SHA from
2026-06-01T16:12:00Z
. No iteration was necessary during this watch window.
I caught the new AI review and did not miss the inline threads. What I did: • Read top-level PR comments, reviews, and all inline/unresolved threads. • Fixed the two new inline issues: ◦
poll_start_task
now normalizes status casing before comparisons. ◦
close_issue_as_duplicate
now forwards
dry_run
instead of hardcoding
False
. • Re-requested review. • Fixed the next round: ◦ Prompt examples now use
GITHUB_API_BASE_URL
/
GITHUB_BASE_URL
for GHE compatibility. ◦ Auto-close now skips self-duplicate markers. ◦ README documents that
remove-label
mode must run from
issue_comment
. • Re-requested review. • Fixed the final actionable observation: ◦ Added
dry-run
action input. ◦ Wired it through to
auto_close_duplicate_issues.py --dry-run
. ◦ Documented it in README. • Re-requested review again. Current PR state: • PR: https://github.com/OpenHands/extensions/pull/283 • Head SHA:
0c7ab9ed27b90603e69ee6475b1dc5281162cf52
• CI: 4/4 passing • Unresolved review threads: 0 • Latest
all-hands-bot
review says: ◦ “🟢 Good taste” ◦ “✅ Worth merging” ◦ no new blocking issues • Merge still shows
REVIEW_REQUIRED
, so it needs human approval/merge, but from CI + bot-review standpoint it’s clean.